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

Проверка того, был ли процесс запущен cron

Я пытаюсь настроить сценарий, который отключает виртуальную машину, если не запущены задания cron. Также будет другой сценарий, который запускает виртуальную машину за час до следующего запланированного задания cron. Для этого лучший подход, который я нашел до сих пор, не вмешиваясь в сами задания cron, - это использовать pstree и посмотрим, если cron процесс породил какие-либо процессы. Есть ли другой способ разобраться в этом? Также есть ли недостатки в использовании pstree чтобы выяснить, породил ли cron процесс.

Также есть ли недостатки в использовании pstree чтобы выяснить, породил ли cron процесс.

Да, это ошибочно, это ненадежно. В частности, если cron был остановлен или перезапущен, запущенные задания будут потеряны, но все равно будут выполняться (в зависимости от того, какая реализация cron). Сам по себе cron - это запускать и забывать.

Лучше бы сами рабочие места следили за состоянием. Каждый может взять стаю или что-то в этом роде, но кодировать каждую работу раздражает.

Вместо этого рассмотрите такую ​​систему заданий, как systemd. Сервисы systemd отслеживают текущее состояние и могут быть связаны с другими модулями, включая завершение работы системы. Собственно, также добавьте таймеры, и вы сможете заменить cron.

Каждый процесс имеет идентификатор родительского процесса, так что вы можете найти те, которые созданы cron. Если вы знаете идентификатор процесса из CRON (на Дебианоидах это в /run/crond.pid) вы можете искать CRONдети с:

ps --ppid $(</run/crond.pid)

или используйте код возврата ps для выключения системы:

PIDFILE=/run/crond.pid
if ! [ -f $PIDFILE ] || ! ps --ppid $(<$PIDFILE) >/dev/null; then
    /sbin/shutdown
fi

Включение ПК с Linux может быть менее надежным, чем его выключение.

«BIOS Wakeup» - BIOS имеет простой в использовании планировщик пробуждения, который включается и настраивается по мере необходимости.
«Wakeonlan» - это отправка сигнала со второго компьютера на устройство, которое вы хотите включить. «RTC» - Убедитесь, что ваше ядро ​​поддерживает RTC, если оно поддерживает, выполните сценарий ниже.

! / bin / bash

sh -c "echo 0> / sys / class / rtc / rtc0 / wakealarm" # Обнулить, если есть тревога пробуждения alredy
sh -c "эхо date '+%s' -d '+ 60 minutes' > / sys / class / rtc / rtc0 / wakealarm "# Чтобы разбудить машину через 60 минут, установив будильник
shutdown -h now # Выключить машину