jsvc (tomcat) не работает как демон при запуске с обратными галочками, а затем перестает работать - PullRequest
1 голос
/ 05 января 2011

В debian lenny при запуске /etc/init.d/tomcat5.5 start он запускает jsvc и ожидает, что он демонизирует себя.

В простой оболочке bash все работает нормально.

Однако из скрипта это полностью застревает:

Например, следующее работает как брелок:

#!/usr/bin/perl
my $cmd = '/etc/init.d/tomcat5.5  start';
system($cmd);

Однако следующее, поскольку jsvc не демонизируется, застревает:

#!/usr/bin/perl
my $cmd = '/etc/init.d/tomcat5.5  start';
`$cmd`;

Он также зависает при запуске с использованием обратных галочек в bash:

#!/bin/bash
CMD='/etc/init.d/tomcat5.5  start'
`$CMD`

Это ошибка в jsvc? Любая идея, почему это работает в оболочке или с помощью system (), но не с помощью обратных галочек? Из-за этой проблемы я на самом деле получаю несуществующие / зомби-процессы.

Ответы [ 2 ]

1 голос
/ 05 января 2011

Просто догадка - чтобы задание стало демоном, нужно закрыть все файловые дескрипторы, которые были открыты в его родительском процессе. Возможно, это проще сделать с system, чем с обратными чертами / readpipe, хотя я не могу придумать каких-либо веских причин, почему это так. Что делать, если вы использовали обратные черты вроде:

`$CMD < /dev/null > /dev/null 2>&1`
0 голосов
/ 05 января 2011

Обратные метки будут соответствовать выводу команды, если данных много, вы можете заполнить буфер. Нет необходимости использовать обратные пометки, если вы не хотите оценивать или выводить результат в самом скрипте.

Например, этот скрипт bash должен работать:

#!/bin/bash
CMD="/etc/init.d/tomcat5.5 start"
# note no backticks
$CMD

Также, пожалуйста, определите "daemonize"? Вы хотите это nohup 'd и асинхронный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...