As root, how can I list the crontabs for all users?
I have a script being run automatically that I can’t find in the crontab for the expected users, so I’d like to search all users’ crontabs for it. Essentially I want to run a crontab -l for all users.
6 Answers 6
Well depends on the script but easily you can find your crontab as root with
Or you can find crontab from spool where is located file for all users
To show all users’ crontabs with the username printed at the beginning of each line:
cd /var/spool/cron/crontabs/ && grep . *
One liner which lists all users and prints cron for every user:
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
- Doesn’t require knowing a system specific crontab path (e.g. /var/spool/cron/crontabs/ vs /var/spool/cron/
- Won’t list «orphan» crons, i.e. crons for users that don’t exist anymore (and thus are not executed effectively)
for USER in `cat /etc/passwd | awk -F ":" ''` do echo "this crontab for user : $USER" crontab -u $USER -l 2>&1 done >> list_all_cron
Strange need to escape chars on this web site. I think copy paste won’t work
Well you got the point : loop all users from /etc/passwd + awk and ask for crontab with crontab -u -l
Welcome to the site, and thank you for your contribution. Indeed the backtick is used for in-line comment formatting, making it difficult to use. Still, please note that the backtick format is deprecated anyway for command substitutions, and the $( . ) format should be used instead. Also, you don’t really need to cat a file into awk , just give the file to be read as parameter after the command.
Как вывести список заданий Cron в Linux
Cron — это демон планирования, который позволяет вам планировать выполнение задач через определенные промежутки времени. Эти задачи называются заданиями cron и могут быть запланированы на выполнение по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Задания Cron обычно используются для выполнения операций по обслуживанию системы. Например, задание cron можно настроить для автоматизации повторяющихся задач, таких как резервное копирование баз данных , обновление системы с помощью последних исправлений безопасности, очистка кеша, отправка электронных писем и т. Д.
В этой статье объясняется, как составить список заданий cron.
Вывод списка пользователей Cron Jobs
Файлы crontab пользователей именуются в зависимости от имени пользователя, а их расположение зависит от операционной системы. В дистрибутивах на основе Red Hat, таких как CentOS, файлы crontab хранятся в каталоге /var/spool/cron , а в Debian и Ubuntu файлы хранятся в каталоге /var/spool/cron/crontabs .
Чтобы получить список всех заданий cron для пользователя, под которым вы сейчас вошли в систему, используйте команду crontab :
Если пользователь настроил задания cron, содержимое пользовательских crontab будет отображаться на экране. В противном случае команда не выведет no crontab for .
Чтобы вывести список заданий cron других пользователей, используйте параметр -u чтобы указать имя пользователя в конце команды. Например, чтобы вывести список заданий cron пользователя с именем «mark», вы должны использовать:
Каждый пользовательский файл crontab имеет 600 разрешений и принадлежит пользователю. Только root и пользователи с привилегиями sudo могут просматривать задания cron других пользователей.
Чтобы узнать, какие пользователи создали задания cron, укажите содержимое каталога spool как пользователь root или sudo:
sudo ls -1 /var/spool/cron/crontabs
Результат будет выглядеть примерно так:
Список заданий Cron системы
/etc/crontab и файлы в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
Используйте cat , less или любой текстовый редактор для просмотра содержимого файлов:
В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron. , и эти скрипты выполняются каждый hour/day/week/month .
Каждый сценарий в этих каталогах должен иметь разрешение на выполнение. В противном случае задание cron не будет выполнено.
Например, чтобы просмотреть все еженедельные задания cron, введите:
-rwxr-xr-x 1 root root 813 Feb 10 2019 man-db
Если вывод пуст, это означает, что еженедельных заданий cron нет.
Таймеры Systemd
Таймеры Systemd — это файлы модулей, которые заканчиваются суффиксом *.timer и позволяют запускать служебные модули в зависимости от времени.
В дистрибутивах Linux, использующих systemd в качестве системы инициализации, таймеры используются как альтернатива стандартному демону cron.
Чтобы просмотреть список всех таймеров systemd на вашем компьютере, выполните следующую команду:
NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2020-02-16 00:00:00 UTC 1h 53min left Sat 2020-02-15 17:04:11 UTC 5h 2min ago logrotate.timer logrotate.service Sun 2020-02-16 00:00:00 UTC 1h 53min left Sat 2020-02-15 17:04:11 UTC 5h 2min ago man-db.timer man-db.service Sun 2020-02-16 03:50:52 UTC 5h 44min left Sat 2020-02-15 17:04:11 UTC 5h 2min ago apt-daily.timer apt-daily.service Sun 2020-02-16 06:12:38 UTC 8h left Sat 2020-02-15 17:04:11 UTC 5h 2min ago apt-daily-upgrade.timer apt-daily-upgrade.service Sun 2020-02-16 18:44:56 UTC 20h left Sat 2020-02-15 17:16:10 UTC 4h 50min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Выводы
Мы показали вам, как составлять список заданий cron и таймеров systemd.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
2 Ноя 2017 12:11:58 | 4 комментария
Как получить список всех задач cron у всех пользователей в Linux ?
Вроде простая задача и вроде есть простое решение в виде:
for user in $(cut -d':' -f1 /etc/passwd); do crontab -u $user -l; done
Но решение неудобное и нужно всегда держать его в голове.
Давайте его усовершенствуем.
Исходные данные: Debian 8.9 (jessie)
Небольшой экскурс для тех кто не в курсе как вообще посмотреть список запланированных задач в планировщике cron в Linux:
Список задач у текущего пользователя:
Список задач у пользователя vasua:
Для вывод задач для всех пользователей очевидно нужно взять список пользователей в системе из /etc/passwd и сделать для каждого пользователя crontab -u USERNAME -l, то есть:
for user in $(cut -d':' -f1 /etc/passwd); do crontab -u $user -l; done
Недостаток этого решения очевиден:
1. Нужно всегда помнить эту команду.
2. Если у пользователя нет задач в планировщике то мы получим сообщение «no crontab for vasua» и таких сообщений может быть десятки если у вас много пользователей — это неудобно.
3. Вывод информации неудобно читать.
Но это не финишная прямая, а только начало, ведь опытный системный администратор знает, что кроме вывода списка заданий командой crontab -l -u USER есть еще задания планировщика в каталоге /etc/cron.d/ и это тоже нужно учитывать, потому что например панель хостинга SHELL=’/bin/sh’ */2 * * * * web30 /usr/bin/php -f /var/www/mysite.ru/web/yii cron-origin/index
Задачи в /etc/cron.d мы тоже учтем и покажем в решении ниже.
Итак, создадим функцию allcrontab в файле ~/.bashrc для ввода информации в более удобном виде:
# Определим цвета вывода red='\e[0;31m' RED='\e[1;31m' green='\e[0;32m' GREEN='\e[1;32m' NC='\e[0m' # Определим нашу функцию вывода списка всех задач cron у всех пользователей function allcrontab() < for user in $(cut -d':' -f1 /etc/passwd); do usercrontab=$(crontab -l -u $2>/dev/null) if [ -n "$" ]; then echo -e "$====== Start crontab for user $$$$ $======$" crontab -l -u $ | sed '/ *#/d; /^ *$/d' echo -e "$====== End crontab for user $$$$ $========$\n" fi done for crond in $(ls -L1 /etc/cron.d); do crondtab=$(cat "/etc/cron.d/$" 2>/dev/null | egrep -Ev "^\s*(;|#|$)") if [ -n "$" ]; then echo -e "$====== Start cron.d $$/etc/cron.d/$$ $======$" echo "$" echo -e "$====== End cron.d $$/etc/cron.d$$ $======$\n" fi done >
Выполняем source ~/.bashrc или перелогиниваемся и выполняем в консоле allcrontab и видим красивый вывод списка всех задач cron у всех пользователей и дополнительно вывод задач из /etc/cron.d:
Результат выполнения allcrontab
Так же опытный системный администратор знает, что существует связаться со мной разными доступными способами.