我正在我的服务器(Debian 12)中测试 cron 脚本。测试一个非常简单的测试脚本,它会回显文件中的一行:
如果我使用
crontab -e
,脚本可以在我的用户中正常运行。但实际的脚本需要以 root 身份运行,所以我尝试使用 sudo crontab -e
安装测试脚本。在这种情况下,脚本永远不会运行。
我也尝试将脚本放入/etc/cron.d
中,但仍然不起作用。也尝试过sudo crontab -e -u root
,但不起作用。没有错误,没有登录 /var/log
。
我发现的唯一日志是在日志上,但它们毫无用处:
Jan 26 09:45:01 server-1 cron[607]: (root) RELOAD (crontabs/root)
Jan 26 09:45:01 server-1 CRON[15437]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Jan 26 09:45:01 server-1 CRON[15441]: (root) CMD (/bin/bash -c "/tmp/test.sh")
Jan 26 09:45:01 server-1 CRON[15439]: (CRON) info (No MTA installed, discarding output)
Jan 26 09:45:01 server-1 CRON[15439]: pam_unix(cron:session): session closed for user root
通过在 cron 脚本中添加
> /tmp/test.log 2>&1
,可以将脚本输出打印到文件中。
* * * * * /bin/bash -c "/tmp/test.sh" > /tmp/test.log 2>&1
这使得调试变得更加容易。在这种情况下,root 用户无法找到可执行文件,因为它不在
PATH
中。