демонизировать процесс Perl - PullRequest
3 голосов
/ 03 июня 2010

Я пытаюсь демонизировать пример теста процесса perl в системном журнале.

1) в скрипте perl он уже входит в rotate файл журнала, но я хотел бы зарегистрировать демон для случая, когда что-то пойдет не так, прежде чем log get create 2) сейчас занимаюсь sudo / usr / sbin / daemonize -u Пользователь -a -e /home/users/me/log/log.log / home / users / me / test

Это уже работает, но проблема в том, что файл журнала станет большим, и единственный способ обработать файл журнала - это если daemonize остановлен.

Итак, я пытаюсь войти в системный журнал, поэтому я делаю

sudo / usr / sbin / daemonize -u Пользователь -a -e / dev / stderr / home / users / me / test | Регистратор

это будет иметь ошибку разрешения при записи в stderr. Если я не работаю как пользователь, он получает журнал нормально, но по соображениям безопасности я должен запустить свой демон как пользователь.

Я застрял, любая помощь оценена

мой тест sub main { мой $ я = 0; для ($ i = 0; $ i <10; $ i ++) { выведите «это тест». $ я "\ n"; } } </p>

Главный (@ARG);

Обратите внимание, я также пробовал 2> & 1, но не работает

1 Ответ

2 голосов
/ 06 ноября 2013

Вы могли бы лучше использовать Daemon :: Daemonize из CPAN или что-то в этом роде. Это позволяет автоматически перенаправлять STDOUT и STDERR. Он утверждает, что обрабатывает все необходимые вам setpgrp.

Я думаю, что если вы объедините это с использованием Sys :: Syslog (также из CPAN), вы сможете делать все, что вам нужно, не полагаясь на / usr / sbin / daemonize и с немного большим контролем над тем, что на самом деле происходит с вашей программой.

У вас, кажется, есть две различные проблемы:

1) Демонизация вашей программы. 2) Вход в системный журнал.

Обе проблемы лучше решать непосредственно в вашем Perl-коде. Помимо Daemon :: Daemonize есть Proc :: Daemonize. У меня нет мнения об их относительных достоинствах, я просто использовал Daemon :: Daemonize в прошлом. Любой из них может заставить вашу программу работать как демон.

Для записи в syslog, использование Sys :: Sylog сделает всю тяжелую работу за вас. Это не простое перенаправление, но оно позволяет отправлять сообщения журнала и не беспокоиться о ротации журнала.

...