Назад | Перейти на главную страницу

Список всех запущенных заданий cron

Есть ли способ увидеть список запущенных заданий 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 можно использовать для отслеживания таких заданий.