CentOS7环境下root用户定时任务未执行问题排查求助
CentOS7环境下root用户定时任务未执行问题排查求助
各位大佬好,我遇到了CentOS7上root用户定时任务未执行的问题,折腾了一番后自己找到原因了,把整个排查过程和结果分享出来,也给大家提个醒~
我的定时任务配置
先贴出root用户的crontab内容:
# crontab -l # Lines below here are managed by Salt, do not edit # SALT_CRON_IDENTIFIER:CLEANCORE 0 * * * * /var/lib/scality/cleancore/clean_core.bash --log --pattern "/var/tmp/core-\%e-\%p-\%t" --maxsize 10G --keep 3 0 18 * * */2 /root/shl/synchro_ADN_To_Scality.sh
其中0 18 * * */2配置的是每隔两天的18点执行/root/shl/synchro_ADN_To_Scality.sh脚本,但1月30日当天这个脚本并没有运行。
排查过程
- 检查脚本日志生成情况
首先查看日志目录,确认是否有对应日期的日志文件:
# ls ~/log | grep synchro_ADN_To_Scality-PAR-ADN-SYN01-20230130-18H
没有任何输出,说明脚本根本没被启动执行。
- 确认crond服务状态
检查crond服务是否正常运行:
# systemctl status crond
输出结果显示服务处于正常运行状态,且1月30日10点还有crontab重载的记录:
● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2023-01-26 15:58:44 CET; 4 days ago Main PID: 775 (crond) CGroup: /system.slice/crond.service └─775 /usr/sbin/crond -n Jan 26 15:58:44 my-server systemd[1]: Started Command Scheduler. Jan 26 15:58:45 my-server crond[775]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 0% if used.) Jan 26 15:58:45 my-server crond[775]: (CRON) INFO (running with inotify support) Jan 30 10:32:01 my-server crond[775]: (root) RELOAD (/var/spool/cron/root)
- 查看crond相关日志
查看journalctl中的crond日志:
# journalctl -u crond
日志里没有18点执行目标脚本的记录;接着查看/var/log/cron中18点的日志片段:
# grep "Jan 30 18:" /var/log/cron
输出只有每小时执行的clean_core脚本和cron.hourly的任务,完全看不到目标脚本的执行痕迹:
Jan 30 18:00:01 my-server CROND[48393]: (root) CMD (/var/lib/scality/cleancore/clean_core.bash --log --pattern "/var/tmp/core-%e-%p-%t" --maxsize 10G --keep 3) Jan 30 18:01:01 my-server CROND[48414]: (root) CMD (run-parts /etc/cron.hourly) Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48414]: starting 0anacron Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48423]: finished 0anacron Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48414]: starting scality-clean-event-logs Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48430]: finished scality-clean-event-logs Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48414]: starting scality-clean-trace-logs Jan 30 18:01:01 my-server run-parts(/etc/cron.hourly)[48437]: finished scality-clean-trace-logs
- 进一步排查日志与系统邮件
搜索cron日志和root用户的系统邮件,都没有找到和目标脚本相关的记录:
# grep -r /root/shl/synchro_ADN_To_Scality.sh /var/log/cron # grep /root/shl/synchro_ADN_To_Scality.sh /var/spool/mail/root
两条命令都没有输出结果。
目标脚本内容
附上synchro_ADN_To_Scality.sh的脚本内容,它的作用是调用另外两个同步脚本并生成对应日志:
#!/usr/bin/env bash logFilePrefix=$(basename $0 .sh) logFileSuffix=$(date +%Y%m%d-%HH%MM%S).log echo "=> Starting <$HOME/shl/synchro_with--delete-during_PAR-ADN-SYN01.sh>, you can following this script in <$HOME/log/$logFilePrefix-PAR-ADN-SYN01-$logFileSuffix>." $HOME/shl/synchro_with--delete-during_PAR-ADN-SYN01.sh >$HOME/log/$logFilePrefix-PAR-ADN-SYN01-$logFileSuffix 2>&1 logFileSuffix=$(basename $0 .sh)_$(date +%Y%m%d-%HH%MM%S).log echo "=> Starting <$HOME/shl/synchro_with--delete-during_PAR-ADN-SYN02.sh>, you can following this script in <$HOME/log/$logFilePrefix-PAR-ADN-SYN02-$logFileSuffix>." $HOME/shl/synchro_with--delete-during_PAR-ADN-SYN02.sh >$HOME/log/$logFilePrefix-PAR-ADN-SYN02-$logFileSuffix 2>&1
问题原因与解决
最后我发现问题出在一个很容易忽略的细节上:我的crontab文件最后一行没有换行!给crontab最后加上换行后,定时任务就正常执行了。
原来crond要求crontab文件的最后一行必须以换行结尾,否则最后一条任务不会被识别执行,这个小坑真的太容易踩了!
备注:内容来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

