Bash Cron中PM2重启的故障排除

Bash Cron中PM2重启的故障排除,bash,cron,ubuntu-18.04,pm2,Bash,Cron,Ubuntu 18.04,Pm2,更新:我无法按照我的期望工作。由于cron找不到我的pm2进程,我最终使用了pm2--cron标志 我在bash脚本中使用的是pm2 restart,当通过cron(以root用户身份)运行时,它在pm2 restart projectName命令上总是失败,但当使用sudo手动运行时,它会起作用。我不知道如何排除故障,因为pm2日志文件没有显示任何明显的问题。看起来好像是其他人有过,所以可能只是个bug?还有其他人找到解决这个问题的方法吗 谢谢大家! 编辑:为@kevinnls添加一些上下文

更新:我无法按照我的期望工作。由于cron找不到我的pm2进程,我最终使用了pm2--cron标志

我在bash脚本中使用的是
pm2 restart
,当通过cron(以root用户身份)运行时,它在
pm2 restart projectName
命令上总是失败,但当使用sudo手动运行时,它会起作用。我不知道如何排除故障,因为pm2日志文件没有显示任何明显的问题。看起来好像是其他人有过,所以可能只是个bug?还有其他人找到解决这个问题的方法吗

谢谢大家!

编辑:为@kevinnls添加一些上下文

下面是.sh脚本;我已经隔离了这个命令,所以我可以测试cron

# Vars
NOW=$(date +"%Y-%m-%d")
LOGS_PATH="/scriptLoc/logs"
LOG_FILE="$LOGS_PATH/$NOW-log.txt"
BE_PATH="/beLoc"

# Start log file
date >> $LOG_FILE
echo "Running..." >> $LOG_FILE

# Temp
cd $BE_PATH
pm2 restart be >> $LOG_FILE
pm2 restart be || echo "ERROR: BE pm2 restart: $?" >> $LOG_FILE
echo "Done." >> $LOG_FILE
exit
  • 如果我使用
    sudo./script.sh
    运行命令,它会工作
  • 如果使用cron运行,我会在日志文件中看到以下输出:
如果我查看pm2日志:

  • 我看到它以代码0退出,并在手动运行脚本时重新启动
  • 我看不到cron重新启动失败的输出
您得到的错误:

[PM2][ERROR] Process or Namespace be not found
什么是“是”?似乎cron内部的pm2不知道如何利用它

如果它是一个文件,当您在shell中运行脚本时,该文件是否在您的工作目录中


您可以进行这些更改以将错误消息记录到
$log\u文件

这将帮助您获得更多详细信息

#redirect output *and* errors to log 
pm2 restart be &>> $LOG_FILE
exit_code=$?
# if previous exit code != 0 do everything after `&&' 
[[ $exit_code -ne 0 ]] && echo "ERROR: BE pm2 restart: $exit_code" >> $LOG_FILE

然后再次尝试运行脚本并共享遇到的错误。

您是否尝试将
pm2 restart
的输出记录到文件或检查
mail
(如果已配置)?它会抛出什么错误?我更新了我的帖子以提供更多的上下文。我没有配置邮件。是否有其他方法可以记录pm2重启的输出?您所做的是+1,但要将错误信息包括到日志中,请进行此更改
#重定向输出和错误以记录pm2重启be&>$log\u文件#如果以前的退出代码!=0在`&&'[$?-ne 0]]&&echo“错误:BE pm2重新启动:$?”>$LOG_文件
好的注释不适用于代码。该错误可能与pm2所需的某些环境变量在cron环境中不可用有关。这是人们面临的一个相当普遍的问题。这也解释了为什么它可以在shell中正常工作。
[PM2][ERROR]找不到进程或命名空间
,所以我想我应该停止并启动它,而不是重新启动;将尝试使用nowbe作为进程名称。我是用pm2 start.js--name be
开始的。我还尝试了
pm2 restart 1
使用它的进程id(未找到)以及
pm2 restart all
(未找到进程)。我也尝试过使用cron本身,但也失败了。我最后要尝试的是在pm2上使用cron标志。你确定这个进程是root所有的吗?相当确定-我正在运行
sudo pm2 start
sudo crontab-e
。我能够让它与pm2——cron标志一起工作,所以我现在只打算使用它。我向pm2提交了一份bug报告,所以如果我得到回复,我会更新它。我将批准你的回答,非常感谢你的帮助@kevinnls
#redirect output *and* errors to log 
pm2 restart be &>> $LOG_FILE
exit_code=$?
# if previous exit code != 0 do everything after `&&' 
[[ $exit_code -ne 0 ]] && echo "ERROR: BE pm2 restart: $exit_code" >> $LOG_FILE