Страница 1 из 1

Ребут апача php скриптом

Добавлено: 2010-07-18 22:13:02
Ly

Код: Выделить всё

<?
system("/usr/local/bin/sudo -b /usr/local/etc/rc.d/apache restart");
?>
- апач просто останавливается

Код: Выделить всё

<?
system("/usr/local/bin/sudo -b sh apacherestart.sh");
?>
- ребутает апач ( в apacherestart.sh строка /usr/local/etc/rc.d/apache restart )

Код: Выделить всё

<?
if (isset($_POST['add_domain']))
{
system("/usr/local/bin/sudo -b sh apacherestart.sh");
}
?>
- апач просто останавливается...

вопрос: почему?

P.S. Это результаты запуска через браузер, через консолько все варианты работают.

Re: Ребут апача php скриптом

Добавлено: 2010-07-18 22:55:49
thefree
а как вы думаете от какого пользователя исполняется cgi?

p.s. еще бы не stderror выводить в фаил

Re: Ребут апача php скриптом

Добавлено: 2010-07-18 23:06:53
Ly
thefree писал(а):а как вы думаете от какого пользователя исполняется cgi?

p.s. еще бы не stderror выводить в фаил
Я бы понял, если бы делал stop а потом старт, а так что-то не врубаюсь.
"P.S." не совсем понял. Все кроме ошибок выводить в файл?

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 5:26:14
ADRE
хмм... ssh?

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 9:05:40
thefree

Код: Выделить всё

system("/usr/local/bin/sudo -b sh apacherestart.sh > out.log");
И посмотрите и за чего не поднимается апач.

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 9:15:40
Ly
thefree писал(а):

Код: Выделить всё

system("/usr/local/bin/sudo -b sh apacherestart.sh > out.log");
И посмотрите и за чего не поднимается апач.
Stopping apache.

В httpd-error.log:

Код: Выделить всё

[notice] caught SIGTERM, shutting down

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 11:53:20
ProFTP
попробовать:

Код: Выделить всё

system("/usr/local/bin/sudo -b sh /usr/local/etc/rc.d/apache22 restart");

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 12:04:25
ProFTP
фигня скорее всего в том что скрипт /usr/local/etc/rc.d/apache не может перегрузить демона

этот скрипт может /usr/local/etc/rc.d/apache22 он ждет пока демон вырубиться вообще, а потом перезапускае...

т.е. скрипт демона вырубил, начинает запускать, а запустить не может потому что он еще не вырубился, может порт 80 еще занят, и по этому вываливается

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 12:14:34
Ly
Он должен был бы при этом в лог ругаться

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 13:55:31
ProFTP
попробуй форкнуть

Код: Выделить всё

system("/usr/local/bin/sudo -b /usr/local/etc/rc.d/apache restart &");
в книге был пример скрипта для управлениея демоном, перезагрузка его, скрипт был на perl

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 17:16:47
ADRE
для того, чтобы корректно рестартануть надо чтоб время выполнения скрипта было больше времени рестарта, т.к. оно рестартит всяко долго суйте & в конец строки перезапуска иначе вебморда и будет дальше висеть и отваливаться по таймауту.

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 17:38:58
Ly
ProFTP писал(а):попробуй форкнуть

Код: Выделить всё

system("/usr/local/bin/sudo -b /usr/local/etc/rc.d/apache restart &");
в книге был пример скрипта для управлениея демоном, перезагрузка его, скрипт был на perl

Код: Выделить всё

<?
system("/usr/local/bin/sudo -b /usr/local/etc/rc.d/apache restart &");
?>
Падает.

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 18:09:17
thefree
ересть какая то тут создается
1. засунь выполнение команды system в переменую
2. попробуй сделать рестарт через httpdctl
3. посмотри что у тебя в переменой

Re: Ребут апача php скриптом

Добавлено: 2010-07-19 19:05:35
ViktorichZ
форкнуться надо для я этого
типа

Код: Выделить всё

/usr/bin/nohup /usr/local/bin/sudo -b sh apacherestart.sh &

Re: Ребут апача php скриптом

Добавлено: 2010-07-20 9:23:42
thefree
вы почитайте про system, перед тем как писать надо форкатся или нет ...

И вообще выполните этот скрипт в консоли и посмотрите что получится.

Re: Ребут апача php скриптом

Добавлено: 2010-07-20 9:32:10
thefree

Код: Выделить всё

/root>php apache.php
Performing sanity check on apache configuration:
Syntax OK
Stopping apache.
Waiting for PIDS: 4314.
Starting apache.
Launching... /usr/local/sbin/gcache
pid=4668
Launching... /usr/local/sbin/gcache
pid=4668
/root>cat apache.php
<?php
system("/usr/local/etc/rc.d/apache restart");
?>
/root>ps auxwww | grep htt
www    4671  1,3  2,1 18968 10724  ??  S    10:30     0:00,00 /usr/local/sbin/httpsd
www    4672  1,3  2,1 18968 10724  ??  S    10:30     0:00,00 /usr/local/sbin/httpsd
www    4673  1,3  2,1 18968 10724  ??  S    10:30     0:00,00 /usr/local/sbin/httpsd
www    4674  1,3  2,1 18968 10724  ??  S    10:30     0:00,00 /usr/local/sbin/httpsd
www    4675  1,3  2,1 18968 10724  ??  S    10:30     0:00,00 /usr/local/sbin/httpsd
root   4669  0,8  2,1 18968 10704  ??  Ss   10:30     0:00,11 /usr/local/sbin/httpsd
/root>
Где проблема?
проверти от какого пользователя у Вас Cgi и настройки sudo

Re: Ребут апача php скриптом

Добавлено: 2010-07-20 10:48:57
Ly

Код: Выделить всё

system("touch /test/testfile.www");
system("/usr/local/bin/sudo -b  touch /test/testfile.sudo");

Код: Выделить всё

-rw-r--r--   1 root  wheel    0 Jul 20 07:41 testfile.sudo
-rw-r--r--   1 www   wheel    0 Jul 20 07:41 testfile.www

Код: Выделить всё

Где проблема?
Повторюсь, через консоль все работает.

Re: Ребут апача php скриптом

Добавлено: 2010-07-20 19:43:01
zg
Ly писал(а):Повторюсь, через консоль все работает.
:smile: ну ну
Ly писал(а):вопрос: почему?
интересно что думает апач, когда его собственный модуль вдруг его же и останавливает? Думаю, как настоящий идеец, он конечно же остановится и по традиции потянет ВСЕ свои открытые процессы за собой. Когда все процессы умерли, кто запустит апач? Правильно, кто угодно, только не сам апач.

Чем не устраивает graceful?

Re: Ребут апача php скриптом

Добавлено: 2010-07-20 21:54:19
thefree
zg писал(а):
Ly писал(а):Повторюсь, через консоль все работает.
:smile: ну ну
Ly писал(а):вопрос: почему?
интересно что думает апач, когда его собственный модуль вдруг его же и останавливает? Думаю, как настоящий идеец, он конечно же остановится и по традиции потянет ВСЕ свои открытые процессы за собой. Когда все процессы умерли, кто запустит апач? Правильно, кто угодно, только не сам апач.

Чем не устраивает graceful?
спорный вопрос ... т.к. perl'ом я гружу апач ... с веба

Re: Ребут апача php скриптом

Добавлено: 2010-07-21 5:44:55
zg
thefree писал(а):т.к. perl'ом я гружу апач ... с веба
перл работает как mod_perl или как CGI? Если модулем, то это апач не будет запускаться, если как CGI, то вероятность есть.

Re: Ребут апача php скриптом

Добавлено: 2010-07-21 8:04:27
thefree
zg писал(а):
thefree писал(а):т.к. perl'ом я гружу апач ... с веба
перл работает как mod_perl или как CGI? Если модулем, то это апач не будет запускаться, если как CGI, то вероятность есть.
cgi, но и пых моно как cgi

Re: Ребут апача php скриптом

Добавлено: 2010-07-21 10:46:11
Ly
Вопрос решил костылем, cgi юзать не хочется...

Re: Ребут апача php скриптом

Добавлено: 2010-07-21 11:36:05
thefree
Ly писал(а):Вопрос решил костылем, cgi юзать не хочется...
а что мешает один скрипт запустить как cgi?

и какой костыль?