Как демонизировать произвольный скрипт в unix?
Я хотел бы демонизатор, который может превратить произвольный, общий скрипт или команду в демон.
есть два распространенных случая, с которыми я хотел бы иметь дело:
у меня есть скрипт, который должен работать вечно. Если он когда-нибудь умрет (или при перезагрузке), перезапустите его. Не допускайте одновременного запуска двух копий (обнаружьте, что копия уже запущена, и не запускайте ее в этом случае).
у меня есть простой скрипт или команду строковая команда, которую я хотел бы продолжать выполнять постоянно (с короткой паузой между запусками). Опять же, не допускайте одновременного запуска двух копий сценария.
конечно, тривиально написать цикл "while (true)" вокруг скрипта в случае 2, а затем применить решение для случая 1, но более общее решение просто решит случай 2 напрямую, так как это относится и к скрипту в случае 1 (Вы можете просто захотеть более короткую или без паузы, если скрипт не работает предназначен для того, чтобы когда-нибудь умереть (конечно, если сценарий действительно тут никогда не умирают, то пауза на самом деле не имеет значения)).
обратите внимание, что решение не должно включать, скажем, добавление кода блокировки файлов или записи PID в существующие скрипты.
более конкретно, я хотел бы программу "демонизировать" , которую я могу запустить как
% daemonize myscript arg1 arg2
или, например,
% daemonize 'echo `date` >> /tmp/times.txt'
который будет держать растущий список дат, добавленных к временам.формат txt. (Обратите внимание, что если аргумент(ы) для демонизации-это скрипт, который работает вечно, как в случае 1 выше, тогда daemonize все равно будет делать правильные вещи, перезапуская его при необходимости.) Я мог бы тогда поставить команду, как выше в моем .вход и / или cron это ежечасно или поминутно (в зависимости от того, как я беспокоился о том, что он неожиданно умирает).
NB: сценарий демонизации должен будет запомнить командную строку, которую он демонизирует, так что если та же командная строка снова демонизируется, она не запускает вторую копировать.
кроме того, решение должно идеально работать как на OS X, так и на linux, но решения для одного или другого приветствуются.
EDIT: это нормально, если вы должны вызвать его с sudo daemonize myscript myargs.
(Если я думаю об этом все неправильно или есть быстрые-и-грязные частичные решения, я хотел бы узнать.)
PS: в случае, если это полезно, вот аналогичный вопрос, специфичный для python.
и этот ответ на подобный вопрос, что кажется, это полезная идиома для быстрого и грязного демонизации произвольного скрипта:
Comments