http://search.cpan.org/~deti/Proc-Daemon-0.05/lib/Proc/Daemon.pod
Также для защиты от запуска нескольких экземпляров нам понадобится модуль Proc::PID::File.
Устанавливаем его и модуль Proc::PID::File:
apt-get install -y libproc-daemon-perl libproc-pid-file-perl
Начинаем использовать:
#!/usr/bin/perl use strict; use warnings; use Proc::Daemon; use Proc::PID::File; # Daemonize Proc::Daemon::Init(); # Если демон уже запущен, то просто выходим. if (Proc::PID::File->running()) { print "Already running\n"; exit 0; } # инициализируем демона # Enter loop to do work for (;;) { # выполняем циклическую задачу }
Вот и все :)
Предвкушая вопрос, почему проверяем демона на существование после демонизации:
Returns true when the process is already running. Please note that this call must be made *after* daemonisation i.e. subsequent to the call to fork(). If the verify flag was set during the instance creation, the process id is verified, alternatively the flag may be passed directly to this method.
По поводу защиты от запуска нескольких экземпляров - она работает прекрасно, pid файл создается в папке /var/run:
ls -la /var/run/ | grep pl
-rw-rw-rw- 1 root root 6 2010-12-05 21:21 mydaemon.pl.pid
Источник: http://www.perlmonks.org/index.pl?node_id=478839
Вот более интересный пример использования Proc::Daemon : http://www.perlmonks.org/?node_id=1073446 . В нём указаны пути использования скрипта в init-скриптах - запуск, остановка.
ReplyDelete