Есть ли способ увидеть список запущенных заданий cron на моем сервере?
Я хотел бы увидеть имя загружаемого файла или команды. Плюс как давно он работает.
Я использую CentOS.
Демон cron просто запускает команды от имени пользователей. Вы можете заглянуть в /var/log/cron
чтобы узнать, какие команды были запущены, вы можете посмотреть во всех обычных местах (/ var / spool / cron /, / и т.д. / crontab, /etc/cron.d/, /etc/cron.*, / etc / anacrontab & c), чтобы получить список команд, запускаемых cron.
Кроме того, время выполнения каждого процесса будет отличаться, и его будет довольно сложно отследить, вы почти наверняка не справитесь с этой задачей. Чего вы на самом деле хотите достичь?
Это быстро и грязно. Мне почти неловко публиковать что-то с таким количеством каналов, поскольку я уверен, что есть более эффективные способы. Тем не менее, он выполняет свою работу, и вы можете извлечь уроки из него и улучшить его самостоятельно.
Вы можете проанализировать дерево процессов для crond, чтобы найти текущие дочерние процессы.
cronpid="$(pgrep -P 1 crond)"
cronjobs="$(pstree -p $cronpid | sed 's/)/)\n/g' | grep -v crond | grep -wo '[0-9]*')"
Пояснение:
pgrep
Команда возвращает PID для crond, где родительский PID равен 1.pstree
Команда возвращает дерево процессов для процесса crond.sed
команда разбивает вывод дерева процессов на несколько строк. (Для целей следующей команды.)grep
исключает сам crond из вывода.grep
извлекает PID для оставшихся процессов. Теперь вывод сведен только к работающим заданиям cron. ($cronjobs
)Теперь вы можете выполнить цикл по возвращенным выше PID и сделать отдельный запрос для каждого задания, чтобы определить, как долго оно выполнялось и что это была за команда.
for job in ${cronjobs[@]}; do
ps -p "$job" -o etime,cmd --no-headers
done
Пример вывода:
01:06 /usr/bin/sleep 90
00:06 /usr/bin/sleep 90
Кроме того, в crontab есть опция -u для вывода списка заданий cron для конкретного пользователя. Что касается времени выполнения, если у задания есть выходные данные, они будут отправлены пользователю по электронной почте, чтобы вы могли получить разницу между запланированным временем начала и прибытием электронного письма для приблизительного представления о том, сколько времени занимает задание. Сам cron не отслеживает время выполнения.
Трудно получить текущие выполняемые задания без ссылки на расписание cron, если только задания не запускаются из /etc/cron.*. В этом случае ps можно использовать для отслеживания таких заданий.