![crontab 不运行 /etc/crontab 中列出的命令](https://linux22.com/image/209274/crontab%20%E4%B8%8D%E8%BF%90%E8%A1%8C%20%2Fetc%2Fcrontab%20%E4%B8%AD%E5%88%97%E5%87%BA%E7%9A%84%E5%91%BD%E4%BB%A4.png)
所以我有一些nfexpire
crontab 应该运行的命令列在/etc/crontab
.它们已经工作良好一段时间了,但最近它们完全停止运行了。所有其他作业都会运行,但/etc/crontab
.我已经通过 exectuing 检查 crontab 守护进程是否正在运行systemctl status crond
我已经检查/var/log/cron
并/var/log/messages
运行journalctl
以查找任何错误,但没有发现任何内容。
我已确保命令可以通过终端执行,因此问题出在 crontab 中的某个地方。
文件/etc/crontab
:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
30 03 01 * * nfexpire -e "something"
30 03 01 * * nfexpire -e "something"
30 03 01 * * nfexpire -e "something"
30 03 01 * * nfexpire -e "something"
30 03 01 * * nfexpire -e "something"
30 03 01 * * nfexpire -e "something"
哦,我已经确保末尾有一个换行符。
也许权限有问题?
-rw-r--r--. 1 root root 891 Feb 6 2020 /etc/crontab
然而,它在这些设置下运行了几个月,没有出现任何问题,所以我不知道是否应该更改其中的任何内容。
附加信息
系统:Centos 7
内核:3.10.0-1160.el7.x86_64
答案1
这是语法问题。在此文件中,您应该添加附加字段,用户名:
30 03 01 * * username nfexpire -e "something"
然后,cron 作业将作为 运行username
。
其他注意事项。
- 是否所有工作都开始同时地?不太好。在这种情况下,最好制作一个脚本来运行所有这些并且只有一个作业。
- 最好根本不要编辑 /etc/crontab。对于 root 拥有的作业,使用 drop-directories
/etc/cron.d
和其他/etc/cron.*
(将可执行脚本放在那里),这些作业的开始时间不是很重要,唯一重要的是作业的周期(每天、每周等)。使用专用用户 crontab 来执行用户运行的作业:crontab -e -u username
.您可以省略“用户名”字段,因为该作业将在该特定 crontab 所属的任何人下运行。无论如何,这样系统更新就不会干扰您的 crontab 条目。 - 考虑使用
systemd
定时器。
答案2
您的 /etc/crontab 文件需要root
位于每个命令的前面。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
30 03 01 * * root nfexpire -e "something"
30 03 01 * * root nfexpire -e "something"
30 03 01 * * root nfexpire -e "something"
30 03 01 * * root nfexpire -e "something"
30 03 01 * * root nfexpire -e "something"
30 03 01 * * root nfexpire -e "something"