每小时我都会收到一封带有此类错误的电子邮件,
Subject: Cron <root@supa> root cd / && run-parts --report /etc/cron.hourly
/bin/sh: root: not found
/etc/crontab 的内容如下,我删除用户“root”或不删除(第 6 列),我得到同样的错误。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
11 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
我的 cron.hourly 目录中有两个文件,
$ ll /etc/cron.hourly/
total 0
lrwxrwxrwx 1 root root 25 2009-10-29 09:24 ntpsync -> /home/<user>/bin/ntpsync
lrwxrwxrwx 1 root root 28 2009-10-23 10:33 foo -> /home/<user>/bin/foo
第一个脚本如下所示,
$ cat ~/bin/ntpsync
#!/usr/bin/env bash
echo "user: $USER"
if [[ "$USER" == "root" ]] ; then
ntpdate ntp.ubuntu.com
else
sudo ntpdate ntp.ubuntu.com
fi
即使我删除了 /etc/cron.hourly/ 目录中的两个脚本,我仍然每小时都会收到相同的错误电子邮件。我尝试重新启动 cron,但仍然收到相同的错误电子邮件。我的下一个想法是重新启动,但我会避免这种情况。
$ sudo /etc/init.d/cron restart
我的 Ubuntu 版本如下,
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.1"
更新:我之前从 /etc/crontab 文件中删除了第 6 列“root”,因为当我在线搜索时,有人提到可以解决问题。现在我认为问题在于我在搞乱系统 crontab 配置而不是 root 的配置。
$ sudo crontab -l
# m h dom mon dow command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
cron 包中的默认 crontab 文件(3.0pl1-100ubuntu2.1,这是 ubuntu 8.04 的最新版本)如下所示:
您应该能够将其粘贴到文件中,但您可能还需要确保您拥有最新版本的软件包。你可以这样做:
更新:
有两种不同类型的 crontab,一种是系统的 crontab,它位于
/etc/crontab
. 这个 crontab 有这个 fromat:另一种类型是用户 crontab 的,可以使用
crontab
. 实际配置位于/var/spool/cron/crontabs/USERNAME
并始终以拥有它的用户身份执行,并且该文件的格式为:我知道您说删除第六列中的“root”后仍然会出现错误,但看起来确实是问题所在。
例如,查看其他行。它们都以“测试”开头。那不是用户,那是命令的开始。删除“root”将使您的命令以“cd”开头。
特别是因为错误消息说它找不到“root”,这是您尝试运行不存在的程序时遇到的错误。
所以我会说尝试再次删除它。
你的
/etc/crontab
样子确实很有趣。每一行实际上都应该有一个用户列,这是最有趣的部分。例如,我的内容如下:顺便说一句,触摸这个文件通常不是一个好主意。如果您需要添加更多通用 crontab,请使用
/etc/cron.d
它。您可以尝试使用以下命令恢复 cron 包的默认配置:看看它是否解决了这个问题。
这里真的有两个问题在起作用。一个(更明显的)是 root 的个人 crontab 中不正确的第 6 列。第二个沉默的 - 是每小时 cron 行之后的命令
/etc/crontab
没有正确执行。修复如下:您可以通过运行删除虚假用户 crontab 文件
sudo crontab -r
完成后,您需要在
/etc/crontab
文件中为每小时 cron 行之后的每一行添加 root 用户 - 如下所示:这应该可以解决这些电子邮件问题。
这样做:
不要这样做:
相反,手动编辑文件/etc/crontab 。