[sisyphus] создание демона, перенаправление stderr и initlog
Artem
=?iso-8859-1?q?u2u_=CE=C1_nm=2Eru?=
Вс Ноя 20 23:31:07 MSK 2005
Доброго времени суток!
Не знаю - это в Сизифе так - или нет (под рукой других дистрибутивов
нет). Имелась программа, выводившая в процессе работы некую отладочную и
просто - информацию о работе. Добавил в нее функционал работы в режиме
демона (fork + setsid). При запуске в консоли - все ок, сообщения о ходе
работы "выплевывались" на консоль. Сделал скрипт в init.d, стартую -
через пару секунд работы программа безследно умирает. Заметил, что
скорость "умирания" зависела от количества выводимой ею информации. Так
же обратил внимание, что запуск с помощью стартап-скриптов идет через
initlog -c "команда" .
if (make_daemon) {
switch (pid=fork()) {
case 0:
setsid();
write_pidfile();
DBG("process pid: %d\n", getpid());
ret=program_run(<parameters>);
break;
<skip>
Все заработало нормально только тогда, когда вывод дескрипторов 0,1,2
был перенаправлен в /dev/null
Типа нижеприведенного:
if (make_daemon) {
switch (pid=fork()) {
case 0:
setsid();
write_pidfile();
DBG("process pid: %d\n", getpid());
if ((fd = open("/dev/null", O_RDWR, 0)) >= 0) {
(void) dup2(fd, 0);
(void) dup2(fd, 1);
(void) dup2(fd, 2);
if (fd != 2)
(void) close(fd);
ret=program_run(<parameters>);
break;
<skip>
Почему initlog прибивал процесс, выводящий много информации в stdout ?
Правильное ли это исправление - или есть более правильные способы
реализации?
P.S. Не знаю - может это уже вопрос для devel@ - но что-то на сайте
написано, что это - "закрытый список рассылки" ?
Rgds, Artem.
Подробная информация о списке рассылки Sisyphus