Sunday, 5 December 2010

Очень простое написание демонов на Perl с использованием Proc::Daemon (Debian)

Для сабжа есть прекрасный модуль:
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

1 comment:

  1. Вот более интересный пример использования Proc::Daemon : http://www.perlmonks.org/?node_id=1073446 . В нём указаны пути использования скрипта в init-скриптах - запуск, остановка.

    ReplyDelete

Note: only a member of this blog may post a comment.