我有一个在 Ubuntu 12.04 机器上每分钟运行一次的 cron 作业
$sudo crontab -e
* * * * * mylogin /pathto/file.sh > /log/filelog
Run Code Online (Sandbox Code Playgroud)
如果我运行file.sh
,bash 脚本会执行一些操作并回显runs
:
$ ./file.sh
runs
Run Code Online (Sandbox Code Playgroud)
如果我检查 cron 选项卡的日志,它会显示作业正在运行:
Jul 10 12:41:01 localhost CRON[1811]: (root) CMD (mylogin /pathto/file.sh > /log/filelog)
Jul 10 12:41:01 localhost CRON[1810]: (CRON) info (No MTA installed, discarding output)
Jul 10 12:42:01 localhost CRON[1813]: (root) CMD (mylogin /pathto/file.sh > /log/filelog)
Run Code Online (Sandbox Code Playgroud)
但是,脚本没有运行。它不这样做的工作,而不是附和runs
到/log/filelog
。
$cat /log/filelog #shows nothing
Run Code Online (Sandbox Code Playgroud)
我还可以采取哪些其他步骤来调试此问题?
mylogin
为/etc/crontab
文件指定一个用户名。使用您的命令,sudo crontab -e
您实际上是在进行编辑,/var/spool/cron/crontabs/root
并且不应在此类文件中指定用户名,而应仅在/etc/crontab
.
如果您必须以用户身份运行该命令,则mylogin
必须将该行放入/etc/crontab
(并使用root
权限对其进行编辑),或者将其放入mylogin
用户的 crontab 中。
来自man 5 crontab
:
EXAMPLE SYSTEM CRON FILE
The following lists the content of a regular system-wide crontab file.
Unlinke a user's crontab, this file has the username field, as used by
/etc/crontab.
Run Code Online (Sandbox Code Playgroud)