如何找到特定的 cron 工作?

Posted

技术标签:

【中文标题】如何找到特定的 cron 工作?【英文标题】:How to find a specific cron job? 【发布时间】:2017-07-07 01:12:36 【问题描述】:

我的问题是如何找到特定的 cron 作业?

我有一个每天在我的网络/电子邮件服务器上运行的 cron 作业,我确信它存在,因为我每天都会收到一封关于它的电子邮件。这是 LetsEncrypt SSL 证书更新。现在我想修改它,但是我到处都找不到。

(编辑:将“我尝试过的事情”从这里移到答案中)

【问题讨论】:

你搜索过/var/spool/cron/吗? 是的,我做到了。它不存在。 也许检查你的日志,找到你的特定 cron 行 你的操作系统是什么? 【参考方案1】:

您的网络/电子邮件服务器是否在容器中部署了任何服务? 检查“docker ps”的输出,看看是否有任何正在运行的相关网络/电子邮件服务。连接到这些实例并找到 cron 条目(如果有)。

【讨论】:

感谢您的帮助,但它没有容器。 查看进程列表,看看是否有僵尸进程带有'ps aux |grep defunct'【参考方案2】:

Cron 作业是用户特定的或系统范围的。您可以通过以 root 身份运行以下命令来列出所有用户的用户特定 cron 作业:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done(source)

如果未找到,则可能是系统范围的 cron 作业,它位于以下文件夹之一中:

etc/crontab 
etc/cron.d
etc/cron.daily
etc/cron.hourly
etc/cron.monthly
etc/cron.weekly

尝试运行:grep -rnw '/etc/' -e 'keyword'

此命令会列出/etc/ 中包含您要查找的关键字的所有文件,因此它也可能会列出您不相关的文件。

在我的例子中,LetsEncrypt 证书更新作业原来是在 etc/crontab,我以为我已经用 crontab -e 检查过,但事实证明它们是不同的:crontab -e 用于用户特定的 cron 作业,而etc/crontab 用于系统范围的cronjobs。这也是为什么我在列出所有用户的所有 cron 作业时没有出现这个 cron 作业的原因。

【讨论】:

以上是关于如何找到特定的 cron 工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 cron 在特定时间只运行一次文件? [关闭]

如何在服务器上的特定小时内每分钟运行一次cron作业

Google App Engine 中的 cron.yaml:如何在特定分钟每小时安排一次任务?

将 cron 选项卡设置为工作日的特定时间

详述Linux计划任务的 at和crontab的命令 以及如何查看crontab日志

经营3次cron工作(例如下午1点,下午2点和下午3点)?