2013-04-03 10 views
0

У меня проблема с apache и php.Когда перезапуск apache, фоновый процесс php убит

Я называю этот скрипт в PHP:

exec("nohup sudo QUIET=y sh foo.sh > /home/tmp/log.txt 2>&1 & echo $!", $res); 

Вскоре после этого foo.sh сценария необходимо перезапустить Apache, чтобы включить новые конфигурационные файлы:

/etc/init.d/apachectl restart 

В командной строке, он отлично работает но в моем сценарии php процесс убивается одновременно с перезапуском apache. Зачем? Я думал, что nohup отделить процесс своего родителя.

(я указываю, что я не могу изменить сценарий ш)

Любая помощь будет принята с благодарностью.

+1

попробовать '/etc/init.d/apachectl reload' вместо этого? – castis

+1

nohup не отделяет его от своего родителя, он просто не закрывает его, когда заканчивается сеанс терминала (зависает, «hup») – Adrian

+0

Я не могу изменить сценарий sh (он принадлежит компании), извините :/ – user1883264

ответ

2

Вы должны использовать /etc/init.d/apachectl reload, если только вы хотите перечитать конфигурационные файлы.

+0

Я не могу изменить сценарий sh (он принадлежит компании), извините: /, любые другие идеи? – user1883264

+1

@ user1883264 Если вы не можете изменить сценарий оболочки, потому что он принадлежит компании. И yo находятся в проекте, который активно использует это; затем либо отправьте запрос, отредактируйте этот файл своему менеджеру, либо создайте копию этой оболочки; дайте ему другое имя и измените его, как вам нужно. –

0

Используйте вместо этого /etc/init.d/apachectl reload, если вы не хотите убивать процесс.

0
/etc/init.d/apachectl reload 

Это не будет stop сервис, но сохранить это работает и обновляет конфигурацию процессов.

0

Поскольку apache restart посылает SIGTERM, не SIGHUP, вы должны обращаться с SIGTERM от foo.sh

Смежные вопросы