Триггер node js файл
У меня есть JS файл, который работает через node.js, поэтому обычно я запускаю окно терминала и набираю что-то вроде node myfile.js
, и он запускается и работает весь день; весело.
Затем, когда я хочу перезагрузить его, я ударил control-c, и он завершает работу. Затем я могу снова запустить команду.
Теперь то, что я хотел бы сделать, это сделать это через веб-страницу, чтобы мои пользователи могли запускать определенные JS файлы, а также иметь возможность "перезагружать" их.
Итак, два вопроса:
- Возможно ли, и если да, то как мне начать?
- Безопасно ли, а если нет, то можно ли это сделать безопасным?
Основываясь на ответе swatkins
Я попробовал это и ничего не получил
$output = exec("node -v");
echo $output;
то я попытался на своей локальной машине, и он отлично работал, что дает?
Также я все еще не уверен в безопасности и возможности остановить запуск script
Ответы
Ответ 1
Предполагая, что вы используете ОС на базе Unix:
Вы можете запускать команды оболочки через функцию exec():
// in php file
// to start the script
exec("node myscript.js &", $output);
$output
становится массивом каждой строки вывода, поэтому вы можете видеть, что такое идентификатор процесса. Затем вы должны использовать этот идентификатор процесса, чтобы убить script:
exec("kill " . $processid);
Ответ 2
Я бы избегал прямого взаимодействия с оболочкой. Вероятно, это было бы самым безопасным, чтобы решить эту проблему следующим образом:
- реализует некоторую общую "службу" - script, которая запускает пользовательский node -app и продолжает работать (что-то вроде https://github.com/isaacs/node-supervisor)
- Сделать это, поэтому он автоматически перезагружается при изменениях как соответствующих файлов, так и записи базы данных
- Когда пользователь запускает перезагрузку, добавьте флаг (временную метку?) в запись базы данных или файл, который просматривается перезагрузкой - script. Затем он перезагрузит node.js-app/script.