Несколько лет назад я настроил задание cron на автоматическое пингование URL-адреса каждую минуту как часть системы мониторинга (это упрощение, но оно подойдет для этого вопроса). Поскольку я ужасный человек, я нигде не документировал это.
Сегодня, спустя годы, у меня начались проблемы с приложением на другом конце URL-адреса. Я исправил это, но потом понял, что понятия не имею, откуда взялась эта работа cron .
Есть ли способ быстро найти или отследить все crontabs в конкретной системе? У меня есть root-доступ, поэтому разрешения не являются проблемой. Я только когда-либо был пользователем cron
, я никогда не смотрел слишком глубоко на его реализацию, но мои инстинкты * nix говорят, что где-то должна быть группа текстовых файлов, которые содержат все crontabs. Я просто не знаю, где они будут, и если я вникну в это, то боюсь найти некоторые, но не все, или упустить какой-то странный нюанс системы.
Кроме того, я понимаю, что с правами root я мог
- Получить список всех пользователей в системе
su
как пользовательcrontab -l
- Повторите со всеми пользователями
но я ищу что-то немного менее ручное (и хочу узнать что-то о реализации cron)
Ответы:
Кронтабы могут спрятать только в нескольких местах:
/etc/crontab
/etc/cron.d/*
/etc/crond.{hourly,daily,weekly,monthly}/*
они называются
/etc/crontab
, так что, возможно, звездочка на этом/var/spool/cron/*
(иногда/var/spool/cron/crontabs/*
)Обязательно проверьте
at
также, которая сохраняет свою работу в/var/spool/at/
или/var/spool/cron/at*/
Кроме того, вместо
Просто сделай это:
источник
Crontabs живут в
/etc/crontab
и (со многими реализациями) его компонентах/etc/cron.*/*
(все отредактированы пользователем root) и в/var/spool/cron/*
(пользовательские crontabs).Если у вас возникли проблемы с поиском оскорбительной работы, другой подход заключается в том, чтобы исследовать ее во время ее работы. Например, вы можете добавить правило брандмауэра для регистрации идентификатора пользователя процесса, открывающего соединения
example.com
на порт 80:Если задание использует приложение, такое как
ping
илиcurl
, создайте тень на обычный двоичный файл с помощью оболочки, которая записывает информацию о том, что его использует, с помощью сценария, подобного следующему/usr/local/bin
:источник
Быстрый и грязный способ:
Точное местоположение, где хранятся crontabs , может варьироваться от системы к системе, но обычно оно
/var/spool
находитсяcrontab
где-то в названии.Также обратите внимание , что многие системы имеют системы crontabs (например , в
/etc/crontab
,/etc/cron.d
) , некоторые из которых можно назвать несколько сценариев , как/etc/cron.hourly
,.daily
...источник
Это звучит как cronjob, созданный crontab. Не у всех crontabs есть
-u
переключатель, но для GNU / Linux он доступен. Это удобная строка для перечисления всех cronjobs, созданных crontab.(Запуск от имени пользователя root.)
источник
Если ничего не помогает, вы можете создать приманку из URL-адреса, который он запрашивает - то есть обработать большой файл или что-то в этом роде - и найти процесс, ожидающий получения данных, а затем найти его PPID.
источник
Любая приличная система должна объяснять точное местоположение crontabs на man-странице (обычно в
FILES
разделе ближе к концу, а также для других демонов).Например,
cron(8)
в моей системе содержится следующее:И я второй совет Тайлерла, чтобы также проверить
at
работу, пока ты там.источник
Подходя к этому наоборот: cron ведет журнал того, что он делает, именно для того, чтобы в первую очередь избежать подобных проблем. В моей системе журнал хранится
/var/cron/log
и выглядит так:Эта строка говорит мне, что экземпляр cron с PID 20232 на машине
fortress
выполняется/home/vucar/lighttpd-watchdog
от имени пользователяvucar
. Хорошо функционирующая система имеет только один запущенный cron, так что это будет просто.Это также работает для
at
рабочих мест, так как они все равно обычно передаются cron:Фрагменты взяты из системы BSD, но общая концепция, скорее всего, везде одинакова.
источник