如何获取我的机器上所有计划的cron作业的列表?


201

我的系统管理员已在我的计算机上设置了一堆cron作业。我想确切地知道什么时间安排了。如何获得该清单?


3
这不是问题的答案,而只是关于最佳实践的说明。一个这些配置为每个用户cron作业rootapache或什么,但一个应该使用/etc/crontab或(更好,在大多数发行版)/etc/cron.d/etc/cron.[timeframe]
mattdm 2011年


我在以下位置发布了一个脚本,该脚本可以在一定程度上实现该脚本的自动化:-stackoverflow.com/questions/134906/…它不是完美的,但可能满足了90%的需求。这是不使用bash编写内容的一个很好的例子。
大卫·

Answers:


143

根据Linux系统的设置,您可以查看:

  • /var/spool/cron/* (用户crontabs)
  • /etc/crontab (系统级crontab)

此外,许多发行版还具有:

  • /etc/cron.d/* 这些配置的语法与 /etc/crontab

  • /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly

这些只是目录,包含根据其目录名每小时,每天,每周或每月执行的可执行文件。

最重要的是,您可以从事各种工作(检查/var/spool/at/*),蟒蛇(/etc/anacrontab/var/spool/anacron/*),以及其他我可能忘记的工作。


4
谢谢,我在中找到了它们/etc/cron.daily。该daily文件如何工作?日常工作什么时间开始?在我的机器上,它们似乎在中午左右运行,但是它想告诉我的系统管理员如何将其更改为午夜。
法兰克

5
cron.daily是从调用的/etc/crontab,例如在我的Ubuntu系统上是:25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )表示上午6:25。
2011年

如果您想要更多的数据点,也可以从我的RHEL5系统上的/ etc / crontab中调用cron.daily。
jsbillings 2011年

在较新的Fedora(可能还没有看过RHEL6)上,cronie守护进程负责使用中的配置/etc/anacrontab
mattdm 2011年

有时它/var/cron也在里面。
CMCDragonkai 2014年

135

对于大多数Cron(例如Vixie-Cron -Debian / Ubuntu默认,Cronie-Fedora默认,Solaris Cron ...),您可以通过以下方式获取当前用户的计划cron作业列表:

$ crontab -l

或通过

# crontab -l -u juser

要获取所有用户的crontab,您可以遍历所有用户并调用此命令。

或者,您可以查找假脱机文件。通常,它们保存在下/var/spool/cron,例如vcron以下目录

/var/spool/cron/crontabs

包含所有用户的所有已配置crontab-除了root用户,该用户也可以通过系统级crontab来配置作业,该crontab位于

/etc/crontab

对于cronie(Fedora / CentOS上的默认设置),还有一个.d用于系统cron作业的样式配置目录:

/etc/cron.d

(与往常一样,该.d目录简化了维护属于不同软件包的配置条目的过程。)

为了方便起见,大多数发行版还提供了一个目录,在该目录中定期执行链接/存储的脚本,例如:

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

这些脚本的及时执行通常通过run-partscrontab系统中的条目或anacron进行管理

使用Systemd(例如在Fedora,CentOS 7等上),可以另外通过计时器单元配置定期作业执行。可以通过以下方式显示已启用的系统计时器:

$ systemctl list-timers

请注意,root用户旁边的用户也可能在配置了计时器的情况下运行用户systemd实例。例如,在Fedora上,默认情况下,将为当前登录的每个用户启动一个用户系统实例。可以通过以下方式识别它们:

$ ps aux | grep 'systemd[ ]--user'

这些用户计时器可以通过以下方式列出:

$ systemctl --user list-timers

发出list-timers命令的另一种方法是*.timer在通常的系统目录和用户systemd配置目录中搜索计时器单元文件(模式:)和指向它们的符号链接:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(与普通服务单元一样,通过在右侧的systemd config目录中创建符号链接来启用计时器单元。)

也可以看看:


我没有投票。但是我只是尝试了一下crontab -l -u root(因为我想了解在这些环境下运行的那些cronjob root),它说我没有使用权限-u
弗兰克(Frank)

3
然后,您必须以足够的权限(即以root用户身份)调用它。
maxschlepzig 2011年

2
仍未完成-某些版本的cron从/etc/cron.d和/ etc / cron运行作业。{每天,每小时,每月,每周}没有从/ etc / crontab调用的帮助程序。
mattdm 2011年

2
@maxschlepzig-但并非总是如此。问题是“我如何获得所有 cron作业的列表”;回答“嗯,这里有一些”不是答案。
mattdm 2011年

1
@maxschlepzig — cronie与Fedora和RHEL6一起提供,不引用/etc/crontab,而是使用/etc/anacrontab。我可能会误以为在任何配置文件中都没有引用这些的实际实现。(但后来,我也没有拒绝投票。...我只是在说。)
mattdm

5

列出给定用户的所有任务。

crontab -u用户名-l;

列出所有用户的所有任务

以超级用户身份运行

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done

1
OP要求提供所有 cron作业的列表。
Drav Sloan

1
由于某些原因,它不显示/etc/cron.d/作业。
jamshid

没用 “ www数据无crontab”。但是用户名www-data存在。
mishanon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.