php exec (svn commit) зависает - PullRequest
       39

php exec (svn commit) зависает

2 голосов
/ 04 марта 2012

Я знаю, что подобные вопросы были, но они не решают мою проблему ...

После проверки папок из репозитория (что работает нормально).Из jquery вызывается метод для выполнения следующих действий в php.

exec ('svn cleanup '.$checkout_dir);
session_write_close(); //Some suggestion that was supposed to help but doesn't
exec ('svn commit -m "SAVE DITAMAP" '.$file);

. В результате выдается следующее:*

1) первая строка (exec ('svn cleanup') ... выполняется нормально. 2) как только я вызываю svn commit, мой сервер зависает, и все идет в ад

apacheЖурналы ошибок показывают эту ошибку: [извещение] Ребенок 3424: Ожидание еще 240 секунд для завершения 4 рабочих потоков.

Я не использую модуль php_svn, потому что не могу его получитьскомпилировать на windows.

Кто-нибудь знает, что здесь происходит?Я могу выполнить точно такой же cmd из окон терминала, и он прекрасно работает.

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

, поскольку я не могу найти какую-либо документацию по jquery exec (), я предполагаю, что это вызывает php.я скопировал это со страницы документации :

При вызове exec () из скрипта apache php, обязательно позаботьтесь о stdout, stderr и stdin (как в примере ниже),Если вы забудете об этом, и ваша команда оболочки выдаст выходные данные, sham и apache deamons могут никогда не вернуться (обычно они истекают через несколько минут).С вызывающей веб-страницы может показаться, что скрипт не возвращает никаких данных.

Если вы хотите запустить процесс php, который продолжает работать независимо от apache (с другим родительским pid), используйте nohub.Пример:

exec ('nohup php process.php> process.out 2> process.err </ dev / null &'); </p>

надеюсь, это поможет

1 голос
/ 04 марта 2012

Хорошо, я нашел проблему.

На самом деле это не имело никакого отношения к exec, выполняющему фон, особенно потому, что фиксация в один файл не занимает много времени.

Проблема заключалась в том, что коммит ожидал, что --username и --password не будут отображаться, а просто приведут к зависанию apache.

Чтобы решить эту проблему, я изменил svnserve.conf в папке, где я установил svn и изменил ее, чтобы разрешить не-авторизованным пользователям доступ на запись.

Я не думаю, что вы обычно захотите это сделать, но мой сайт уже аутентифицирует имя пользователя и парольпосле входа в систему.

В качестве альтернативы вы можете

...