Итак, для начала; Я пытаюсь запустить приложение узла через PHP. Я создал скрипт, который может проверить, запущено ли приложение узла, закрыть его и запустить. Но у меня есть некоторые проблемы с использованием экрана с PHP.
Теперь, прежде чем я продолжу, комментарии о том, как я не должен делать это, не помогут, мне нужно запустить его через PHP, потому что он работает вместе с веб-сайтом, и я хочу, чтобы наш клиент мог изменять настройки, что перезапустит приложение (если у вас нет другой идеи).
В настоящее время я использую команду:
screen -dmS NODEJS node main.js 121016
Теперь я могу запустить узел и получить вывод (пока я добавляю куда-нибудь файл process.exit, чтобы PHP / Node не работал вечно). Я уже нахожусь в правильном каталоге, я использую этот код для его запуска:
$out = shell_exec('screen -dmS NODEJS node main.js 121016');
var_dump($out);
Но это не создание сеанса экрана. Я также попробовал:
$proc = proc_open('screen -dmS NODEJS node main.js 121016', $this->pipe_spec, $pipes);
Я также пытался использовать exec
и обратные галочки, но я вполне уверен, что обратные галочки такие же, как shell_exec?
Во всяком случае, я полностью потерян, и я не уверен, что еще я могу сделать. Я не хочу, чтобы узел постоянно работал, поэтому я хочу, чтобы он запускался, когда вы нажимаете кнопку сохранить в диспетчере (в php), а затем он закрывает / останавливает себя, когда завершает свои задачи.
Любая помощь будет иметь большое значение, я потратил часы, пытаясь решить ее, но я все равно ничего не понимаю … спасибо, в любом случае.
Обновление об этом для всех, кто заинтересован.
Проблема была вызвана тем, что я неправильно управлял каналами и не отправлял канал stdOut. Проблема возникла в основном, когда я пытался убрать экран, так как он не давал мне правильный PID.
Обновление о том, что я использовал в конце:
node main.js > /dev/null 2> logs/app-error.log & echo $!
Последний ‘2>’ мне не удалось правильно.
Других решений пока нет …