最近有个需求需要定时执行一些 pm2 命令,于是我就想到了将这些 pm2 命令写入一个.sh 脚本,然后直接用 crontab 定时执行这个脚本就行了
一开始直接在 sh 脚本里写 pm2 xxx,执行了下报pm2 command not found
于是 which 了一下 pm2 然后在 sh 里写上了 pm2 的完整路径,同时也单独执行了下这个 sh 脚本是没问题的
但是放在 crontab 里执行就报/usr/bin/env: node: No such file or directory
服务器 node 是用 nvm 安装的,所有操作都是同一个用户
奇怪的是两台服务器,一台能成功执行,另一台不能成功执行,两台环境都是一样的
Linux 这块知识比较薄弱,请教各位大神应该如何排查问题和解决
1
2code 2018-05-09 16:42:00 +08:00
应该是两台服务器的$PATH 变量的配置不同导致的吧
|
3
2code 2018-05-09 17:43:20 +08:00
你是怎么看的?要看的是 crontab 执行的时候的$PATH 变量,不是一般用户登录上去之后的$PATH 变量
|
5
imherer OP @2code 我在 /etc/crontab 文件里找到了,文件里的 PATH=/sbin:/bin:/usr/sbin:/usr/bin
我的 node 在如下路径里都有 /usr/bin/node /usr/lib/node /usr/local/bin/node /home/ec2-user/.nvm/versions/node/v8.11.1/bin/node |
6
fds 2018-05-09 18:16:57 +08:00 pm2 是个可执行的脚本文件,开头是 ```#!/usr/bin/env node``` 也就是会调用 ```env node``` 执行这个脚本文件。肯定是两个 env 配置不太一样。简单的改法是直接把 node 写在 pm2 前面就行,类似
* * * * * /usr/bin/node /path/to/pm2 command |
8
julyclyde 2018-05-09 21:14:45 +08:00
现在学 node 都可以不先学 linux 了吗
|
9
zhengzhou518 2018-05-10 00:13:05 +08:00
希望 V2EX 加入这种黑色主题来让用户查看
|
10
POPOEVER 2018-05-10 14:45:46 +08:00
这个应该交给 systemd 才靠谱吧
|