2016-06-24 1 views
2

я кодирование серверного процесса, и я хочу сделать Баш скрипт, который будет перезапустить процесс в одном из двух условий:Bash скрипта для перезапуска процесса на аварии или изменение файла

  1. текущего процесс выходы (в данном случае, перезапуск после некоторой задержки)
  2. исполняемых модифицированные (в данном случае, перезапуск немедленно)

скрипта сам по себе не должна выйти в любом состоянии.

Я могу сделать любую из этих вещей (с помощью простого цикла или с помощью fswatch), но мои попытки сделать это не сработали. Есть ли способ сделать оба в сценарии Bash?

ответ

1

Я не знаком с fswatch, но если вы установили Opts и путь таким образом, что она будет записывать данные только тогда, когда файл вы заботитесь об изменениях и вы не беспокоитесь о буферизации, вы можете попробовать:

fswatch $opts $path | while read k; do kill $pid; done & 
while sleep 1; do # delay 1 second between restarts 
    cmd & 
    pid=$! 
    wait $pid 
done 

Это не возобновляется немедленно при изменении исполняемого файла. Для того, чтобы получить, что вы могли бы сделать (но я не думаю, что это стоит):

fswatch $opts $path | while read k; do kill $pid; done & 
while : ; do 
    cmd & 
    pid=$! 
    wait $pid 
    test $? -gt 128 || sleep 1 
done 
+0

Я не 100% уверен, что во 2-ом случае, '$' тест, основанный надежен?. В обоих случаях это статус выхода из одного процесса. поэтому он не сможет отличить два случая отказа ... Можем ли мы установить переменную в петле на основе fswatch (нам потребуется переадресация процесса для этого или 'shopt -s lastpipe') и использовать ее в цикле' while true' ? – anishsane

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