You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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日当天这个脚本并没有运行。

排查过程

  1. 检查脚本日志生成情况
    首先查看日志目录,确认是否有对应日期的日志文件:
# ls ~/log | grep synchro_ADN_To_Scality-PAR-ADN-SYN01-20230130-18H

没有任何输出,说明脚本根本没被启动执行。

  1. 确认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)
  1. 查看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
  1. 进一步排查日志与系统邮件
    搜索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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:54:05