Intereting Posts
Что произойдет, если я не вызову session_start ()? С PHP / GD, как мне обрезать изображение? PHP: как получить список классов, реализующих определенный интерфейс? Регулярное выражение php для удаления пробелов в html PHP Stomp: чтение всех сообщений в очереди Я не могу получить доступ к XAMPP phpMyAdmin; он говорит: Ошибка MySQL: Документация Не удается подключиться: неверные настройки Zend Framework 2: передача переменных («параметры») для формирования с помощью formelementmanager Отправить несколько строк в одном письме Функции и переменные, начинающиеся с одиночного или двойного подчеркивания find_in_set в левом соединении в Laravel sprintf – повторяющиеся аргументы Php Изменение размера изображения увеличивает размер изображения mysqli_prepare против PDO Эффективное объединение 3 таблиц в MYSQL Возможные способы сортировки записей, в которых используются неанглийские шрифты?

файл узла триггера узла

У меня есть JS-файл, который выполняется через node.js, поэтому обычно я node myfile.js окно терминала и node myfile.js что-то вроде node myfile.js и он запускается и работает весь день; весело.

Затем, когда я хочу перезагрузить его, я нажимаю control-c, и он завершает работу. Затем я могу снова запустить команду.

Теперь то, что я хотел бы сделать, – это сделать это через веб-страницу, чтобы мои пользователи могли запускать определенные JS-файлы, а также иметь возможность «перезагружать» их.

Итак, два вопроса:

  1. Возможно ли, и если да, то как мне начать?
  2. Безопасно ли, а если нет, может ли оно быть безопасным?

Основываясь на ответе swatkins

я попробовал это и ничего не получил

  $output = exec("node -v"); echo $output; 

то я попробовал на своей локальной машине, и он отлично работал, что дает?

также я все еще не уверен в безопасности и возможности остановить запущенный скрипт

Предполагая, что вы используете ОС на базе Unix:

Вы можете запускать команды оболочки через функцию exec ():

 // in php file // to start the script exec("node myscript.js &", $output); 

$output становится массивом каждой строки вывода, поэтому вы можете видеть, что такое идентификатор процесса. Затем вы должны использовать этот идентификатор процесса, чтобы убить скрипт:

 exec("kill " . $processid); 

Я бы избегал прямого взаимодействия с оболочкой. Вероятно, это было бы самым безопасным, чтобы решить это так:

  • реализовать некоторый общий «сервис» -скрипт, который запускает приложение-узел-приложение и поддерживает его работу (что-то вроде https://github.com/isaacs/node-supervisor )
  • Сделайте это, поэтому он автоматически перезагружается при изменениях либо соответствующих файлов, либо записи базы данных
  • Когда пользователь запускает перезагрузку, добавьте флаг (timestamp?) В запись базы данных или файл, который просматривается сценарием перезагрузки. Затем он перезагрузит node.js-app / script.