![非 root 用户无法运行 crontab](https://linux22.com/image/532998/%E9%9D%9E%20root%20%E7%94%A8%E6%88%B7%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C%20crontab.png)
我已将用户添加到组中crontab
并使用crontab -e
(作为用户)编辑文件。我已确保文件以空白行结尾,并将文件添加/etc/cron.allow
为 root 和用户各自一行。我的 cron 作业从 运行良好/etc/crontab
。每次更改后我都会重新启动 cron。
我还可能错过什么?
PS,正如我回复下面的评论一样:
/var/log/cron
不存在。grep /var/log/messages | grep cron
什么都不输出。为了测试作业执行情况,我添加了* * * * * user touch /home/user/wtf
grep CRON /var/log/syslog
(这是最近的两个条目,在第一个之后,看到“孙子”位,我想也许 crontab -e 不会接受绝对路径,所以我尝试了touch wtf
Dec 13 16:37:01 COMPUTER CRON[21855]: (username) CMD (username touch /home/username/wtf)
Dec 13 16:37:01 COMPUTER CRON[21854]: (CRON) error (grandchild #21855 failed with exit status 127)
Dec 13 16:37:01 COMPUTER CRON[21854]: (CRON) info (No MTA installed, discarding output)
Dec 13 16:38:01 COMPUTER CRON[21871]: (username) CMD (username touch wtf)
Dec 13 16:38:01 COMPUTER CRON[21870]: (CRON) error (grandchild #21871 failed with exit status 127)
Dec 13 16:38:01 COMPUTER CRON[21870]: (CRON) info (No MTA installed, discarding output)
解决了:
当使用时crontab -e
,无需指定用户,事实上,它无法被理解并成为执行命令的一部分,因此会出现错误。
答案1
在典型的系统中,您不必 (a) 将任何人添加到 crontab 组或 (b) 编辑 cron.allow。默认行为是,如果没有相反的明确配置,则允许每个人运行 cron 作业。也就是说,您所做的配置更改虽然没有必要,但不应妨碍工作。
您在系统日志中看到了什么?根据系统的配置方式,您可能会在中找到 cron 输出/var/log/cron
。您能给我们举一个未运行的 cron 作业的例子吗?您如何区分“cron 未运行此作业”和“cron 正在运行此作业但作业运行不正确”?
答案2
在 RHEL4 中,允许非 root 用户 crontab 的默认行为已更改,我认为这是不可取的。我使用以下方法恢复了以前的行为:
sed -i 's%account required pam_access.so%account required /lib/security/pam_access.so accessfile=/etc/security/access-cron.conf%g' /etc/pam.d/crond
touch /etc/security/access-cron.conf
如果您想保持性能但允许特定用户,那么在日志中生成错误可能会有所帮助。
当时,我发现这是最适合我需求的方法。cron.deny
在 /etc 中创建一个空文件可能会复制相同的性能。