PM2运行清理旧文件的Bash脚本报错且无日志,如何排查?
排查PM2运行清理脚本报错无日志的步骤
检查进程基础配置与日志状态
执行pm2 show 8查看进程详情,重点确认:- 脚本路径是否正确,有无拼写错误
- 日志文件(error log/out log)的路径及权限,确保PM2运行用户对日志路径有读写权限
- 确认是否存在
disable_logs: true这类禁用日志的配置
手动验证脚本有效性
切换到PM2运行该进程的用户,直接执行脚本:/path/to/your/cleanup_script.sh观察是否有报错(比如权限不足、目录不存在)。如果无直观输出,可临时修改脚本添加调试和日志重定向:
#!/usr/bin/bash set -x # 记录正常输出和错误信息到临时文件 find /home/collector/cloudtrail/ -mtime +3 -exec rm {} + >> /tmp/cleanup_out.log 2>> /tmp/cleanup_err.log find /home/collector/stackdriver/ -mtime +3 -exec rm {} + >> /tmp/cleanup_out.log 2>> /tmp/cleanup_err.log执行后查看
/tmp/cleanup_out.log和/tmp/cleanup_err.log定位问题。检查PM2进程运行模式适配性
你的脚本是一次性执行的清理任务,而PM2默认守护长期运行的进程。脚本执行完成后会自动退出,PM2会判定进程崩溃并尝试重启,这可能是报错的根源:- 若需定期执行,改用PM2的定时任务模式:
pm2 start your_script.sh --cron "0 0 * * *" # 每天凌晨执行一次 - 若仅需单次测试,禁用自动重启:
执行后用pm2 start your_script.sh --no-autorestartpm2 status查看进程状态,再检查日志。
- 若需定期执行,改用PM2的定时任务模式:
查看系统级日志
若PM2自身日志无记录,检查系统日志:- 若PM2以systemd服务运行:
journalctl -u pm2-<your-username>.service - Debian/Ubuntu:查看
/var/log/syslog - CentOS/RHEL:查看
/var/log/messages
从中查找PM2启动进程时的系统级错误(如权限不足、资源限制)。
- 若PM2以systemd服务运行:
验证PM2日志功能是否正常
临时创建测试脚本test_log.sh:#!/usr/bin/bash echo "正常输出测试" sleep 2 echo "错误输出测试" >&2执行
pm2 start test_log.sh,再用pm2 logs <test-process-id>查看日志,确认PM2日志系统本身是否工作正常。
内容的提问来源于stack exchange,提问作者Zack Tzeng
相关产品推荐
相关产品推荐

