Триггер 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.