Linux cron всех пользователей

Как вывести список заданий 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 нет.

Читайте также:  Can i install linux online

Таймеры 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 мы тоже учтем и покажем в решении ниже.

Читайте также:  Linux изменить shell пользователя

Итак, создадим функцию 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

Результат выполнения allcrontab

Так же опытный системный администратор знает, что существует связаться со мной разными доступными способами.

Источник

Показать cron job-ы по всем пользователям в Unix/Linux

Некоторые статьи, я беру из черновиков (которые создавал года 2-3 назад) и привожу до ума. И сейчас я, хотел бы рассказать как можно получить все крон-задачи для всех пользователей в Unix/Linux ОС.

Самое первое что приходит на ум, это получить список пользователей в passwd:

# for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done
root # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr . # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed # # minute hour mday month day who command # 0 0 */3 * * /usr/bin/bash /home/scripts/backUPs.sh # bin no crontab for bin daemon no crontab for daemon adm no crontab for adm

Приведу другую вариацию такого вывода, например:

# sed 's/^\([^:]*\):.*$/crontab -u \1 -l 2>\&1/' /etc/passwd | grep -v "no crontab for" | sh

Данный пример рабочий, но он будет показывать много не нужного. Давайте немного доработает и приведем к следующему виду:

# for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
0 0 */3 * * /usr/bin/bash /home/scripts/backUPs.sh

Вот, так уже лучше и не выводит хлам.

Приведу другую вариацию такого вывода, например:

# getent passwd | cut -d: -f1 | perl -e'while(<>)/dev/null`;print "$_\n$l\n" if $l>'
for USER in $(cut -f1 -d: /etc/passwd); do \ USERTAB="$(crontab -u "$USER" -l 2>&1)"; \ FILTERED="$(echo "$USERTAB"| grep -vE '^#|^$|no crontab for|cannot use this program')"; \ if ! test -z "$FILTERED"; then \ echo "# ------ $(tput bold)$USER$(tput sgr0) ------"; \ echo "$FILTERED"; \ echo ""; \ fi; \ done

Выглядит очень хорошо и наглядно!

Читайте также:  Md5 хэш файла linux

Нашел готовое решение в виде скрипта, вот его содержание:

#!/bin/bash # System-wide crontab file and cron job directory. Change these for your system. CRONTAB='/etc/crontab' CRONDIR='/etc/cron.d' # Single tab character. Annoyingly necessary. tab=$(echo -en "\t") # Given a stream of crontab lines, exclude non-cron job lines, replace # whitespace characters with a single space, and remove any spaces from the # beginning of each line. function clean_cron_lines() < while read line ; do echo "$" | egrep --invert-match '^($|\s*#|\s*[[:alnum:]_]+=)' | sed --regexp-extended "s/\s+/ /g" | sed --regexp-extended "s/^ //" done; > # Given a stream of cleaned crontab lines, echo any that don't include the # run-parts command, and for those that do, show each job file in the run-parts # directory as if it were scheduled explicitly. function lookup_run_parts() < while read line ; do match=$(echo "$" | egrep -o 'run-parts (-\S+ )*\S+') if [[ -z "$" ]] ; then echo "$" else cron_fields=$(echo "$" | cut -f1-6 -d' ') cron_job_dir=$(echo "$" | awk '') if [[ -d "$" ]] ; then for cron_job_file in "$"/* ; do # */ [[ -f "$" ]] && echo "$ $" done fi fi done; > # Temporary file for crontab lines. temp=$(mktemp) || exit 1 # Add all of the jobs from the system-wide crontab file. cat "$" | clean_cron_lines | lookup_run_parts >"$" # Add all of the jobs from the system-wide cron directory. cat "$"/* | clean_cron_lines >>"$" # */ # Add each user's crontab (if it exists). Insert the user's name between the # five time fields and the command. while read user ; do crontab -l -u "$" 2>/dev/null | clean_cron_lines | sed --regexp-extended "s/^((\S+ +))(.+)$/\1$ \3/" >>"$" done < <(cut --fields=1 --delimiter=: /etc/passwd) # Output the collected crontab lines. Replace the single spaces between the # fields with tab characters, sort the lines by hour and minute, insert the # header line, and format the results as a table. cat "$" | sed --regexp-extended "s/^(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(.*)$/\1\t\2\t\3\t\4\t\5\t\6\t\7/" | sort --numeric-sort --field-separator="$" --key=2,1 | sed "1i\mi\th\td\tm\tw\tuser\tcommand" | column -s"$" -t rm --force "$"

Тестировался на rpm’s и deb’s ОС.

$ for user in $(dscl . -list /users | cut -f1 -d:); do echo $user; sudo crontab -u $user -l; done

Вот и все, статья «Показать cron job-ы по всем пользователям в Unix/Linux» завершена.

Источник

Оцените статью
Adblock
detector