Как получить список всех запланированных заданий cron на моем компьютере?

201

Мой системный администратор настроил кучу заданий cron на моей машине. Я хотел бы точно знать, что запланировано на какое время. Как я могу получить этот список?

Фрэнк
источник
3
Это не ответ на вопрос, а просто заметка о лучших практиках. Один может настроить их как для каждого пользователя хрон рабочих мест для rootили apacheили любых других , но один должны использовать /etc/crontabили (лучше, в большинстве дистрибутивов) /etc/cron.dи /etc/cron.[timeframe].
Mattdm
1
stackoverflow.com/questions/134906/…
тот бразильский парень
Я разместил скрипт, который автоматизирует это в полезной степени по адресу: - stackoverflow.com/questions/134906/… Он не идеален, но, вероятно, покрывает 90% потребностей. Это хороший пример того, что не стоит писать в bash.
Дэвид Коллиер

Ответы:

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/*) и, возможно, другие, которые я забыл.

jsbillings
источник
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 утра.
Kowh
cron.daily также вызывается из / etc / crontab в моей системе RHEL5, если вам нужно больше точек данных.
Jsbillings
На более новой Fedora (и, возможно, RHEL6 - еще не смотрел), cronieдемон заботится о тех, кто использует конфигурацию в /etc/anacrontab.
Mattdm
Иногда это /var/cronтоже.
CMCDragonkai
135

С большинством Crons (например, Vixie-Cron - по умолчанию в Debian / Ubuntu, Cronie - по умолчанию в Fedora, Solaris Cron ...) вы получаете список запланированных заданий cron для текущего пользователя через:

$ crontab -l

или для другого пользователя через

# crontab -l -u juser

Чтобы получить crontabs для всех пользователей, вы можете перебрать всех пользователей и вызвать эту команду.

Кроме того, вы можете посмотреть файлы спула. Обычно они сохраняются в /var/spool/cron, например, для следующей директории vcron

/var/spool/cron/crontabs

содержит все настроенные crontabs всех пользователей - кроме пользователя root, который также может настраивать задания через общесистемный 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-partsзаписей в системном crontab или через anacron .

С помощью Systemd (например, в Fedora, CentOS 7, ...) периодическое выполнение задания может быть дополнительно сконфигурировано через блоки таймера . Включенные системные таймеры могут отображаться через:

$ systemctl list-timers

Обратите внимание, что пользователи помимо root могут также запускать экземпляры systemd пользователей, на которых настроены таймеры. Например, в Fedora по умолчанию пользовательский экземпляр systemd запускается для каждого пользователя, который в данный момент вошел в систему. Их можно узнать с помощью:

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

Эти пользовательские таймеры могут быть перечислены через:

$ systemctl --user list-timers

Альтернативой выдаче list-timersкоманды является поиск файлов модулей таймера (pattern:) *.timerи символических ссылок на них в обычных каталогах конфигурации system и user 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.)

Смотрите также:

maxschlepzig
источник
Я не понизил. Но я только что попробовал crontab -l -u root(потому что те cronjobs, которые я хочу знать о run root), и он говорит, что у меня нет привилегий для использования -u.
Фрэнк
3
Затем вы должны вызывать его с достаточными привилегиями - то есть как rootпользователь.
maxschlepzig
2
Все еще не завершено - некоторые версии cron запускают задания из /etc/cron.d и /etc/cron.]daily,hourly,monthly,weekly} без вспомогательной программы, вызываемой из / etc / crontab.
Mattdm
2
@maxschlepzig - но не всегда. И вопрос «как я могу получить список всех заданий cron»; ответ «ну, вот некоторые из них» не является ответом.
Mattdm
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
ОП запрашивает список всех заданий cron.
Драв Слоан,
1
По какой-то причине это не показывает /etc/cron.d/ заданий.
Джамшид
Это не работает. msgstr "нет crontab для www-данных". но имя пользователя www-data существует.
Мишанон