当时我写了一个pm2 flush清理日志的shell脚本,是crontab定时任务,每次执行都会打印过程到某一文件,看到日志里面所有命令都执行了就是不执行pm2 fliush这个命令,当然了手动执行shell那是一点问题都没
其实有如下情况
1 在crontab -e 里面 没有使用绝对路径,什么意思呢?就是全路径
例如: ./data/logs.sh 或者 sh /data/logs.sh —> 为了保证一定会执行其实正确应该是
/usr/bin/sh /data/logs.sh
2 也有可能是权限问题, 最好加上chmod +x 这个权限,或者chmod 755 logs.sh
7: rwx — 满权限
4: r - 读
2: w - 写
1: x - 执行
3 环境变量问题,crontab 找不到这个命令 这就要说到pm2 fliush 这个命令了
whereis pm2 路径一定要在/usr/bin/下 否则crontab是无法找到 pm2这个命令的,如果不在一定要软连接到/usr/bin/目录下 :
ln -s /usr/local/lib/node/bin/node /usr/bin/node
pm2命令已经在/usr/bin/目录下了然后再来执行为什么看到日志还是没有执行,这就很奇妙了,经过排查,其实是这样的 ps -ef | grep pm2 看到
pm2的命令始终还是发生在nodejs命令身上,进程其实还是由node执行的只不过是pm2实现统一管理
所以 node命令也要在/usr/bin/下
然后crontab定时任务就正常了