排查定時任務,/etc/crontab不執行的過程
近期有新項目上線,有用到定任務,個人習慣是添加定時任務到/etc/crontab,但昨天注意到定時任務並未執行,便排查原因。
過程如下:
查看定時任務狀態service crond status (centos7 版本systemctl status crond.service)-->active正常
試圖重啓定時任務service crond restart(centos7 版本systemctl restart crond.service)-->成功,按理在/etc/crontab會一分鐘重新讀取無需重啓
結果:
又試圖嘗試了網上的其他辦法,均失敗,只能將定時任務移到 crontab -e下
今天發現由於定時任務移到了root用戶的crontab -e下,導致網站程序一些文件權限問題,第一想法是crontab -u www -e把crontab移到www用戶下面,無奈,也不執行。
突然看到/var/log/cron,居然忘記查看日誌了。
錯誤如下:
(CRON) ERROR chdir failed (/home/www): No such file or directory 前往home,創建www目錄並改目錄所有者爲www。
chown www:www www
去掉root,www用戶下面的定時任務,該寫到/etc/crontab。查看定時任務日誌,執行成功!
我們知道定時任務可以寫到/etc/crontab與crontab -e下面,但你知道兩者的區別嗎?
語法不同
/etc/crontab
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
crontab -e
* * * * * command
複製代碼
使用範圍
修改/etc/crontab這種方法只有root用戶能用,這種方法更加方便與直接直接給其他用戶設置計劃任務,而且還可以指定執行shell等等, crontab -e這種所有用戶都可以使用,普通用戶也只能爲自己設置計劃任務。然後自動寫入/var/spool/cron/usename