У вас есть два варианта: изменить сценарий Python или написать оболочку сценария оболочки.
Чтобы изменить скрипт Python:
Вы должны зацикливаться на том, что вы хотите делать.
Установите обработчик сигналов, чтобы перехватить сигнал INT
(отправленный Ctrl - C ) и сигнал TERM
(отправленный обычным убить
). Когда сигнал будет пойман, установите переменную, сообщающую скрипту Python, что он больше не должен зацикливаться. Я недостаточно знаком с Python, чтобы рассказать вам, как это сделать.
Альтернативное решение: оболочка сценария оболочки, которая выполняет то же самое, что и выше, но вне сценария Python:
#!/bin/sh
loop_again=1
trap 'loop_again=0;wait' INT TERM
while (( loop_again )); do
echo "Kill me with 'kill -9 $$'"
./python_script &
echo "Kill the Python script with 'kill $!'"
wait
done
Этот сценарий оболочки запускает ваш сценарий Python в фоновом режиме, а затем ожидает его завершения. Затем он перезапускает его на неопределенный срок.Он также сообщает вам, как завершить его и сценарий Python на каждой итерации.
Если вы уничтожите
сценарий (используя простой kill
, не kill -9
), либо нажмите Ctrl - C , переменная loop_again
устанавливается в ноль (что приводит к завершению цикла в конце текущей итерации), а затем ожидает завершения текущего фонового процесса. перед выходом.
Если вы завершите сценарий оболочки с помощью kill -9
(то же самое, что kill -s KILL
, отправив сигнал KILL
, который не может быть проигнорированным или перехваченным обработчиком сигнала), он завершится, оставив ваш скрипт Python работающим в фоновом режиме, пока он не завершится сам по себе.