У меня есть простой сценарий 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