Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > perl скрипт как демон


Автор: box 14.12.2010, 16:47
запускаю скрипт в консоли по ssh, знает ли кто нибудь как запустить скрипт демоном тобиш в бекгроунде , что бы по закрытии консоли он не останавливался 

Автор: vadiml 14.12.2010, 17:03
1й вариант -- screen
2й (если хочется именно демон) -- use Proc::Daemon (или самому это написать)

Автор: Pfailed 14.12.2010, 17:35
Подтверждаю, не далее как вчера демонизировал пару скриптов с помощью Proc::Daemon

Автор: Egik2 14.12.2010, 20:17
Еще можно стандартный линуксовый setsid использовать.
Можно сделать демона из чего угодно
http://www.opennet.ru/man.shtml?topic=setsid&category=2&russian=0

Автор: infarch 15.12.2010, 10:55
А cron не подойдет?

Автор: FishHunter 16.12.2010, 12:09
+1 за крон
второе: можно так nohup perl script.pl &

Автор: XSugar 17.12.2010, 14:43
с командной строки 
Код

script.pl &


и в коде скрипта
Код

close STDIN; close STOUT; 


ну можно и по крону

Автор: Pfailed 17.12.2010, 17:17
Цитата(XSugar @ 17.12.2010,  14:43)
с командной строки 
Код

script.pl &


и в коде скрипта
Код

close STDIN; close STOUT; 


ну можно и по крону

SIGHUP прилетит.

Автор: vadiml 17.12.2010, 19:52
Pfailed
> script.pl &

В таком случае если было подключение по ssh при выходе из bash-a будет убит и скрипт, т.к. он будет потомком bash-а.
Для разового запуска лучше screen или nohup в завистмости от нужности интерактивности.

Автор: Pfailed 18.12.2010, 09:38
vadiml, это не я написал.

Автор: Sugar84 21.12.2010, 19:56
vadiml
>В таком случае если было подключение по ssh при выходе из bash-a будет убит и скрипт, т.к. он будет потомком bash-а.

Разве?

У меня есть шел-скрипт, где в скрипте вызывается функция вот так вот:
Код

do_sleep &

Скрипт спокойно засыпает и отрабатывает все что нужно даже при закрытии терминала.

Хотя на перле я не проверял.

Автор: Sugar84 22.12.2010, 13:12
Только что проверил, такое вполне работает:
Код

./script.pl &

Автор: arto 22.12.2010, 13:34
и по записи в stdout/stderr не прибивает?

Автор: noize 25.12.2010, 17:01
Код

sub daemonize {
        chdir $tmpdir or die "Can't chdir to $tmpdir: $!";
        open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
        open STDOUT, '/dev/null' or die "Can't write to /dev/null: $!";
        open STDERR, '/dev/null' or die "Can't write to /dev/null: $!";
        defined(my $pid = fork)   or die "Can't fork: $!";
        exit if $pid;
        umask 0;
}

Автор: Sugar84 29.12.2010, 18:43
arto
>и по записи в stdout/stderr не прибивает?

Я закрывал их в скрипте:
Код

close STDIN;
close STDOUT;
close STDERR;


Все Ок работало, дальше не стал заморачиваться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)