对 Cron 中的 PM2 重启进行故障排除
Posted
技术标签:
【中文标题】对 Cron 中的 PM2 重启进行故障排除【英文标题】:Troubleshooting PM2 Restart in Cron 【发布时间】:2021-06-23 12:56:42 【问题描述】:更新:我无法按我的意愿进行这项工作。我最终使用了 pm2 --cron 标志,因为 cron 找不到我的 pm2 进程。
我在 bash 脚本中使用 pm2 restart
,当由 cron(以 root 身份)运行时,它总是在 pm2 restart projectName
命令上失败,但在使用 sudo 手动运行时可以正常工作。我不确定如何排除故障,因为 pm2 日志文件没有显示任何明显的内容。看起来其他人有 the same issue 所以也许这只是一个错误?有其他人找到解决此问题的方法吗?
谢谢!
编辑:为@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 运行它,我会在日志文件中看到以下输出:
Fri Mar 26 17:35:01 UTC 2021
Running...
Use --update-env to update environment variables
ERROR: BE pm2 restart: 1
Done.
如果我查看pm2 logs
:
【问题讨论】:
您是否尝试过将pm2 restart
的输出记录到文件或检查mail
(如果已配置)?它会抛出什么错误?
我更新了我的帖子以提供更多背景信息。我没有配置邮件。还有其他方法可以记录pm2 restart
的输出吗?
您所做的是 +1,但要将错误消息包含到日志中,请进行此更改 #redirect output and errors to log pm2 restart be &>> $LOG_FILE # if previous exit code != 0 do everything after `&&' [[ $? -ne 0 ]] && echo "ERROR: BE pm2 restart: $?" >> $LOG_FILE
好的 cmets 不适用于代码。
【参考方案1】:
我无法以我想要的方式解决这个问题。最终我将-c
(cron) 标志与 pm2 本身一起使用。
pm2 cli reference
gitlab issue
【讨论】:
【参考方案2】:你得到的错误:
[PM2][ERROR] Process or Namespace be not found
什么是“是”?似乎 cron 内部的 pm2 不知道该怎么做。
如果它是一个文件,当您在 shell 中运行脚本时,该文件 be 在您的工作目录中吗?
您可以进行这些更改以将错误消息记录到$LOG_FILE
。
这应该可以帮助您获得更多详细信息。
#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 所需的某些环境变量在 cron 环境中不可用有关。这是人们面临的一个相当普遍的障碍。这也可以解释为什么它在你的 shell 中运行良好。[PM2][ERROR] Process or Namespace be not found
所以我想我会停止并启动它而不是重新启动;现在就去试试
be 是进程名。我从pm2 start start.js --name be
开始。我也刚刚尝试pm2 restart 1
使用它的进程ID(未找到)以及pm2 restart all
(未找到进程)。我也只是尝试让 cron 本身 run the restart command 但这也失败了。我要尝试的最后一件事是在 pm2 本身上使用 cron 标志。
您确定该进程归根用户所有吗? ?
相当肯定 - 我正在运行 sudo pm2 start
和 sudo crontab -e
。我能够让它与 pm2 --cron 标志一起工作,所以我现在就使用它。我向 pm2 提交了一个错误报告,所以如果我得到回复,我会更新这个。要批准您的回答,感谢您的所有帮助@kevinnls以上是关于对 Cron 中的 PM2 重启进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章
如何对事件日志中的 .NET 2.0 错误报告消息进行故障排除?
对 signInManager.PasswordSignInAsync 进行故障排除 [重复]
对 Google Chrome 浏览器中的 SSL/TLS 握手进行故障排除