Отсоединить команду от текущей оболочки - PullRequest
0 голосов
/ 26 августа 2011

У меня есть сервер nodejs, который выполняет команды через child_process.exec. Одна такая команда перезапускает экземпляр узла (и пару других вещей).

Сценарий делает что-то вроде этого:

  • уничтожить узел
  • узел уничтожения программ использует
  • очистить логи
  • узел перезапуска программ использует
  • перезапустить узел

Я знаю, что это не лучший способ сделать это, но мои руки связаны (это выпущенная версия программного обеспечения, и мы не можем реструктурировать до следующего выпуска).

Что происходит, когда я запускаю команду, она убивает узел, а затем остальная часть сценария умирает.

Оболочкой по умолчанию, которую использует этот узел, является sh, и ее нельзя изменить.

Какие у меня варианты?

Сервер работает как root, поэтому проблем с разрешениями не будет. Я полагаю, что мне придется как-то запустить новую оболочку, но я не совсем уверен, как это сделать. Я хотел бы успешно выйти из текущей оболочки, но это не является обязательным требованием, если я могу получить весь сценарий отдельно от текущей оболочки.

1 Ответ

0 голосов
/ 26 августа 2011

После долгих трудов и страданий, вот пример того, что удалось:

  • эхо-скрипт> / dev / shm / filename
  • chmod + x / dev / shm / filename
  • nohup / dev / shm / filename

Затем в сценарии:

killall node

Это довольно низкотехнологичный способрешения проблемы и, конечно, не оптимально, но это работает.Так как nohup использовался, он не умрет, когда умрет родитель.Это означает, что все сценарии будут запущены.

Также оказалось, что у меня была другая ошибка, которая усложнила ситуацию, и с тех пор исправлена.

...