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

Fra*_*ank 231 linux cron scheduling

我的系统管理员在我的机器上设置了一堆 cron 作业。我想知道确切的时间安排。我怎样才能得到那个清单?

max*_*zig 163

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

$ crontab -l
Run Code Online (Sandbox Code Playgroud)

或通过其他用户

# crontab -l -u juser
Run Code Online (Sandbox Code Playgroud)

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

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

/var/spool/cron/crontabs
Run Code Online (Sandbox Code Playgroud)

包含所有用户的所有配置的 crontabs - 除了 root 用户,他也能够通过系统范围的 crontab 配置作业,它位于

/etc/crontab
Run Code Online (Sandbox Code Playgroud)

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

/etc/cron.d
Run Code Online (Sandbox Code Playgroud)

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

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

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
Run Code Online (Sandbox Code Playgroud)

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

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

$ systemctl list-timers
Run Code Online (Sandbox Code Playgroud)

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

$ ps aux | grep 'systemd[ ]--user'
Run Code Online (Sandbox Code Playgroud)

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

$ systemctl --user list-timers
Run Code Online (Sandbox Code Playgroud)

发出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
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

  • 然后你必须以足够的权限调用它——即作为“root”用户。 (3认同)
  • 仍然不完整 — 某些版本的 cron 运行来自 /etc/cron.d 和 /etc/cron.{daily,hourly,monthly,weekly} 的作业,而没有从 /etc/crontab 调用的帮助程序。 (3认同)
  • @maxschlepzig - 但并非总是如此。问题是“我怎样才能获得_所有_cron 作业的列表”;“好吧,这是其中一些”的答复不是答案。 (2认同)

jsb*_*ngs 160

根据您的 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

这些只是包含可执行文件的目录,这些可执行文件按其目录名称每小时、每天、每周或每月执行一次。

最重要的是,你可以在工作 (check /var/spool/at/*)、anacron (/etc/anacrontab/var/spool/anacron/*) 以及我可能忘记的其他人。

  • cron.daily 是从 `/etc/crontab` 调用的,例如在我的 Ubuntu 系统上它是: `25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )` 这意味着早上 6:25。 (7认同)
  • 谢谢,我在`/etc/cron.daily` 中找到了它们。“每日”文件是如何工作的?日常工作将在什么时间运行?在我的机器上,它们似乎在中午左右运行,但它想告诉我的系统管理员如何将其更改为午夜。 (5认同)

Man*_*lam 9

列出给定用户的所有 cron。

crontab -u 用户名 -l;

列出所有用户的所有 cron

以超级用户身份运行

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