2013-05-24 2 views
2

Ну, я в основном стараюсь, чтобы скрипт bash выполнял сценарий узла навсегда. Я сделал следующий Баш скрипта:Сценарий Bash на фоне: как убить дочерние процессы

 
#!/bin/bash 
while true ; do 
     cd /myscope/ 
     unlink nohup.out 
     node myscript.js 
     sleep 6 
done & echo $! > pid 

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

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

Я протестировал его в терминале, не отправив скрипт bash на задний план и введя ctrl + c, оба сценария будут убиты.

Я, очевидно, пропустил понимание чего-то на том, как работает фоновый процесс. Ради бога, может ли кто-нибудь мне помочь?

ответ

3

Есть много инструментов, которые позволяют вам делать то, что вы пытаетесь, только два с верхней частью моей головы:

  • https://github.com/nodejitsu/forever - простой инструмент командной строки для обеспечения того, чтобы данный скрипт работает непрерывно (т.е. навсегда)
  • https://github.com/remy/nodemon - Монитор для каких-либо изменений в вашем Node.js приложения и автоматически перезагружать сервер - идеально подходит для развития

Может быть, второй это не то, что вы ищете, но все же стоит аль ООК.

Если вы не можете или не хотите использовать те, то проблема заключается в том, что если вы убьете родительский процесс ребенок один до сих пор нет, поэтому, вы должны убить, что тоже:

pkill -TERM -P $PID 

где $PID является родительским PID.

+0

Я бы предпочел держаться подальше от вечно или других третьих лиц, так как я работаю на пи, и каждый байт памяти много для меня значит. Это работает для меня! Благодаря! – tin

+0

Добро пожаловать, помните, чтобы поддержать или отметить, как принято, если это решает вашу проблему. –

Смежные вопросы