Есть ли команда или существующий сценарий, который позволит мне просматривать все запланированные задания cron системы * NIX одновременно? Я хотел бы, чтобы он включал все пользовательские crontabs, а также /etc/crontab
и все, что в /etc/cron.d
. Также было бы неплохо увидеть конкретные команды, запущенные run-parts
в /etc/crontab
.
В идеале, я хотел бы, чтобы выходные данные были в приятной форме столбца и упорядочены каким-либо осмысленным образом.
Затем я мог бы объединить эти списки с нескольких серверов, чтобы просмотреть общий «график событий».
Я собирался написать такой сценарий сам, но если кто-то уже пошел на неприятности ...
Ответы:
Вы должны запустить это как root, но:
будет зацикливаться на каждом имени пользователя, перечисляя его crontab. Crontabs принадлежат соответствующим пользователям, поэтому вы не сможете увидеть crontab другого пользователя без них или root.
Отредактируйте, если вы хотите знать, какому пользователю принадлежит crontab, используйте
echo $user
источник
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?В итоге я написал сценарий (я пытаюсь научить себя тонкостям написания сценариев bash, поэтому здесь вы не видите ничего похожего на Perl). Это не совсем простое дело, но оно делает большую часть того, что мне нужно. Он использует предложение Кайла для поиска crontabs отдельных пользователей, но и занимается
/etc/crontab
( в том числе скрипты , запущенныеrun-parts
в/etc/cron.hourly
,/etc/cron.daily
и т.д.) , а также рабочие места в/etc/cron.d
каталоге. Он берет все это и объединяет их в нечто вроде следующего:Обратите внимание, что он показывает пользователя и более-менее сортирует по часам и минутам, чтобы я мог видеть ежедневное расписание.
До сих пор я тестировал его на Ubuntu, Debian и Red Hat AS.
источник
<' showcrons.sh: line 59:
сделано <<(cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
В Ubuntu или Debian вы можете просмотреть crontab,
/var/spool/cron/crontabs/
а затем файл для каждого пользователя. Это только для пользовательских crontab, конечно.Для Redhat 6/7 и Centos crontab находится под
/var/spool/cron/
.источник
/etc/passwd
. ИМО, это должен быть принятый ответ, а не все грубые решения.Это покажет все записи crontab от всех пользователей.
источник
Зависит от вашей версии Linux, но я использую:
как корень. Очень просто и очень коротко.
Дает мне вывод, как:
источник
tail -n +1 /var/spool/cron/*
для отображения всего содержимого файлов.sudo sh -c 'tail -n +1 /var/spool/cron/*'
если вы не хотите стать пользователем root. Мой ОКР вынудил меня выяснить, почему я не мог выполнить эту команду, как написано. Это было потому, что обычные пользователи не имеют доступа к / var / spool / cron dir, а глобус интерпретировался как буквальный звездный символ, которого, очевидно, не существует.cd /var/spool/cron/cron/ && grep . *
также будет печатать соответствующее имя пользователя перед каждым заданием cronНебольшое уточнение ответа Кайла Бертона с улучшенным форматированием вывода:
источник
Это позволяет избежать путаницы с passwd напрямую, пропускает пользователей, у которых нет записей cron, и для тех, у кого они есть, выводит имя пользователя и их crontab.
Главным образом, опуская это здесь, так что я могу найти это позже, если мне когда-нибудь понадобится искать его снова.
источник
/etc/passwd
. Приведенное выше решение Мэтта больше подходит для этой конкретной ситуации, но полезно знать, что команда существует.Если вы проверяете кластер с помощью NIS, единственный способ проверить, есть ли у пользователя запись в crontab, соответствует ответу Matt's / var / spool / cron / tabs.
источник
Получить список от пользователя ROOT.
источник
Этот скрипт работал для меня в CentOS, чтобы перечислить все кроны в среде:
источник
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
немного сэкономил времяМне нравится простой однострочный ответ выше:
Но в Solaris, который не имеет флага -u и не печатает проверяемого пользователя, вы можете изменить его следующим образом:
Вы получите список пользователей без ошибок, выдаваемых crontab, когда учетной записи не разрешено использовать cron и т. Д. Помните, что в Solaris роли также могут быть в / etc / passwd (см. / Etc / user_attr).
источник
источник
Следующее удаляет комментарии, пустые строки и ошибки от пользователей без crontab. Все, что вам осталось, это четкий список пользователей и их рабочих мест.
Обратите внимание на использование
sudo
во 2-й строке. Если вы уже root, удалите это.Пример вывода:
Я использую это на Ubuntu (с 12 по 16) и Red Hat (с 5 по 7).
источник
Зависит от вашей версии cron. Используя Vixie cron во FreeBSD, я могу сделать что-то вроде этого:
если я хочу, чтобы вкладка была удалена, я мог бы сделать что-то вроде этого:
Где это буквальная вкладка в части замены sed.
Это может быть более системно независимым, чтобы проходить через пользователей
/etc/passwd
и делатьcrontab -l -u $user
для каждого из них.источник
Спасибо за этот очень полезный скрипт. У меня были небольшие проблемы с запуском его на старых системах (Red Hat Enterprise 3, которые по-разному обрабатывают egrep и табуляции в строках), а также на других системах, где ничего не было в /etc/cron.d/ (тогда скрипт заканчивался ошибкой). Итак, вот патч, чтобы он работал в таких случаях:
Я не совсем уверен, что изменения в первом egrep - это хорошая идея, но этот скрипт без проблем протестирован на RHEL3,4,5 и Debian5. Надеюсь это поможет!
источник
Здание на вершине @Kyle
чтобы избежать комментариев обычно вверху / etc / passwd,
И на macosx
источник
grep -v '^#
вместо того, чтобы полагаться на магическое число11
?Я думаю, что лучший вкладыш будет ниже. Например, если у вас есть пользователи в NIS или LDAP, они не будут в / etc / passwd. Это даст вам crontabs каждого пользователя, который вошел в систему.
источник
Вы можете написать для всего списка пользователей:
Вы также можете перейти к
этот файл будет перечислять расписание
источник
С извинениями и благодаря юкондуде.
Я попытался суммировать настройки времени для легкого чтения, хотя это не идеальная работа, и я не касаюсь вещей «каждую пятницу» или «только по понедельникам».
Это версия 10 - это сейчас:
Сейчас я публикую сценарий полностью здесь.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
источник
Поскольку речь идет о циклическом просмотре файла (
/etc/passwd
) и выполнении действия, мне не хватает подходящего подхода к вопросу Как можно прочитать файл (поток данных, переменную) построчно (и / или поле за полем) )? :Это читает
/etc/passwd
построчно, используя в:
качестве разделителя полей. Говоряread -r user _
, мы$user
удерживаем первое поле и_
остальные (это просто нежелательная переменная, чтобы игнорировать поля).Таким образом, мы можем затем вызвать
crontab -u
с помощью переменной$user
, которую мы цитируем для безопасности (что, если она содержит пробелы? Это вряд ли в таком файле, но вы никогда не узнаете).источник
В Solaris для определенного известного имени пользователя:
Всем остальным * Nix понадобится
-u
модификатор:Чтобы получить все пользовательские вакансии одновременно в Solaris, как и в других постах выше:
источник
Для меня лучше всего посмотреть на / var / spool / cron / crontabs
источник
Этот скрипт выводит Crontab в файл, а также перечисляет всех пользователей, подтверждающих тех, у кого нет записи в crontab:
источник