У меня есть следующий сценарий, который я запускаю с помощью команды:
./thescript.sh 2>&1 &
и если я убью порожденный им подпроцесс, через несколько секунд он будет перезапущен. Почему это?
thescript.sh:
#!/bin/bash
#...
#other stuff
#...
while true; do
nohup /usr/bin/php ../thing/script.php scriptargs >my_log.log 2>&1
/bin/mail -s "$SUBJECT" "me@home.com" < $EMAILMESSAGE
done
результат
ps -ax | grep scriptargs
дает
19624 pts/0 S 0:00 /bin/bash ./thescript.sh
19643 pts/0 S 0:00 /usr/bin/php ../thing/script.php scriptargs
19771 pts/0 S+ 0:00 grep scriptargs
если я бегу
kill 19643
Я получил:
./thescript.sh: line 24: 19643 Terminated /usr/bin/php ../thing/script.php scriptargs >my_log.log 2>&1
но если затем запустить:
ps -ax | grep scriptargs
снова получаю:
19624 pts/0 S 0:00 /bin/bash ./thescript.sh
19824 pts/0 S 0:00 /usr/bin/php ../thing/script.php scriptargs
19862 pts/0 S+ 0:00 grep scriptargs
Я получаю электронное письмо - но затем он возобновляет этот процесс.
Почему это?
Это было бы из-за петли
while true; do
done
Когда процесс завершается, он завершается и разрешает отправку почты. Затем снаряд попадает в done
заявление и возвращает while true
что верно, поэтому он снова запускает команды внутри.