前段时间,我设置了一个 cron 作业,每分钟运行一个脚本。从那时起,我将系统从 ubuntu intrepid 升级到了 ubuntu karmic。现在工作失败了。我每分钟收到一次有关它的电子邮件。
没问题吧?我可以解决问题,然后继续我的路。好吧,好吧,但我现在没有时间这样做,所以我只想关闭这项工作,直到我有时间去做。
好吧,这就是奇怪的地方。我找不到 cron 工作。它不在用户(或任何其他用户)的 crontab 中(在 /var/spool/cron 下)。它不在 /etc/crontab 中。它不在 /etc/cron.d 中。我已经递归地搜索了整个 /etc/ 和 /var/ 的脚本名称。找不到。
我已经在 cron 的 pid 上运行 lsof 以查看它是否有一些我不熟悉 open 的奇怪位置,不行。
我在这里缺少什么?作业正在运行。它由 cron 运行(电子邮件来自 cron - 我可以在 cron 下运行的系统日志中看到它),但它似乎不存在任何地方。
小智 8
在我的 Debian 系统上,/var/log/syslog包含每个执行的 cron 作业的条目……
Jan 17 20:10:01 machine1 /USR/SBIN/CRON[1545]: (convict) CMD (fetchmail -s >/dev/null 2>&1)
Jan 17 20:17:01 machine1 /USR/SBIN/CRON[1800]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 17 20:20:01 machine1 /USR/SBIN/CRON[1914]: (convict) CMD (fetchmail -s >/dev/null 2>&1)
Run Code Online (Sandbox Code Playgroud)
如果您的作业由 cron 执行,您应该在/var/log/syslog 中找到对它的引用。
我有一些事情你可以尝试一下,可能会有帮助。
要查看系统上的 cron 作业,请尝试以下操作:
crontab -l
Run Code Online (Sandbox Code Playgroud)
这就是我得到的结果(因为我只有一个作业设置要运行):
#CrInfo osascript -e "tell application "iTunes" to updateAllPodcasts"
30 2 * * * osascript -e "tell application "iTunes" to updateAllPodcasts"
Run Code Online (Sandbox Code Playgroud)
这将列出将按计划运行的作业。
要列出系统上所有正在运行的进程及其完整文件系统路径,请键入:
ps -xa
Run Code Online (Sandbox Code Playgroud)
您将得到如下输出:(这应该可以让您更轻松地知道在哪里删除运行电子邮件的脚本)
4968 ?? 0:03.24 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_655520
6112 ?? 0:23.31 /Applications/QuickTime Player.app/Contents/MacOS/QuickTime Player -psn_0_712878
7203 ?? 4:33.38 /Applications/Transmit.app/Contents/MacOS/Transmit -psn_0_946407
7240 ?? 2:56.99 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome -psn_0_975086
7358 ?? 0:00.02 /System/Library/PrivateFrameworks/KerberosHelper.framework/Resources/LKDCHelper
7369 ?? 0:04.72 /usr/sbin/AppleFileServer
Run Code Online (Sandbox Code Playgroud)
IBM 网站上还有一个页面可以帮助您了解如何正确使用 Cron。
也就是说,如果您的作业没有出现在 cron 中,您确定您没有使用其他您忘记的工具来运行它吗?例如,您可能已经下载了一些自定义守护程序应用程序?