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

Как проверить, запущен ли демон

У меня есть простой сценарий bash, который я хотел бы запустить как демон ...

#!/bin/bash
while true; do
crontab cron
sleep 58m
done

Я запускаю это как демон с помощью этой команды ...

setsid copy_cron.sh >/dev/null 2>&1 < /dev/null &

[1] 17025

Но как только он запущен, я не могу найти для него процесс в ps -aux ..?

Как мне убедиться, что демон запущен, или убить его, если нужно?

Во-первых, ваш скрипт не указывает абсолютный путь для cron файл, поэтому он зависит от того, запускается ли он в правильном каталоге.

Во-вторых, выполнение этого в независимом автономном цикле вместо того, чтобы связывать его с процессом, генерирующим файл, подвержено гонкам.

В-третьих, пользовательский crontab каждый раз перезаписывается, что приводит к потере всех записей, которые могли быть добавлены кем-то или чем-то еще, кроме вашего скрипта.

Никаких фатальных недостатков, но нарушения принципа наименьшего удивления, которые, по моему опыту, могут укусить вас, когда система запускается в производство.

Если твоя цель - сохранить crond работает, я бы предложил использовать Монит.

Однако в большинстве случаев нет причин, по которым демон cron прекращает работу ... так что в этом может быть нет необходимости.

Для справки, у меня ДЕЙСТВИТЕЛЬНО есть этот тип защиты для моих систем, и я использую конфигурацию Monit, которая выглядит так:

check process cron
    with pidfile "/var/run/crond.pid"
    start program = "/sbin/service crond start"
    stop program = "/sbin/service crond stop"

Если ваша цель - запускать что-то по расписанию, просто используйте cron.

Просто сделай это

~$ nohup copy_cron.sh &

С участием ps awx он будет работать как

7168 pts/2    R      0:04 /bin/bash ./copy_cron.sh

Убей его вот так

~$ kill 7168