Crontab定时任务未执行排查:Nginx监控重启脚本异常
crontab定时任务语法错误:
定时任务末尾的2>未指定错误输出的目标路径,属于无效重定向语法,会导致crontab无法正常执行该任务,直接报错终止。正确写法应为> /dev/null 2>&1(丢弃所有输出)或指定错误日志文件。脚本中冗余的
sudo命令:
该定时任务以root身份执行,脚本运行时的身份本身就是root,使用sudo完全多余,甚至可能因crontab环境变量缺失sudo相关配置导致命令执行失败,直接删除sudo即可。service命令路径缺失:
crontab的默认环境变量PATH仅包含/bin和/usr/bin,而service命令的实际路径通常为/usr/sbin/service,直接使用service会出现命令找不到的问题,导致脚本执行失败,必须改用命令的绝对路径。日志重定向不完整:
脚本中service nginx restart > /var/log/nginx/relaunch.log仅重定向了标准输出,错误输出会被丢弃,若重启命令执行失败,错误信息无法写入日志,无法排查问题。应修改为> /var/log/nginx/relaunch.log 2>&1,将标准错误也同步写入日志。进程状态判断逻辑不可靠:
依赖grep 'active (running)'匹配service nginx status的输出存在兼容性问题,不同发行版或Nginx版本的状态输出格式可能有差异(如部分系统输出为active running不带括号),会导致grep匹配失败,出现误判。更可靠的方式是使用systemctl is-active --quiet nginx(针对systemd系统),返回值为0则表示运行中,否则为未运行。
内容的提问来源于stack exchange,提问作者Jerome

