У меня есть следующая команда в php-скрипте, который выполняется после нажатия кнопки на моем веб-сайте:
exec('nohup php /var/www/website.org.uk/myScript.php >> /var/www/website.org.uk/shared/storage/logs/myLog.log 2>&1 & echo $! > /var/www/website.org.uk/pid.txt');
В идеале на моем сервере он должен выполнить myScript.php
, отправить любой вывод из скрипта на myLog.log
и сохранить pid процесса myScript.php
на pid.txt
.
myScript.php:
<?php
print "\nStarting dummy script\n";
sleep(10); // Sleep for 10 seconds.
print "\nFinished dummy script\n";
Если я захожу на сервер и запускаю команду вручную, все работает нормально. Однако при запуске с веб-сайта pid записывается в файл pid.txt
, но скрипт php завершается неудачно. В журнал ничего не записывается, и я не вижу процесса, выполняющегося на сервере при использовании команды ps
(я должен видеть, что он работает не менее 10 секунд из-за команды sleep).
После прочтения предыдущих сообщений о переполнении стека я изменил разрешения для всех трех файлов на -rwxr-x---
и обновил группу до www-data
, но это не имело никакого значения.
Я что-то здесь упускаю?