В bash
есть два специальных фоновых задания: +
и -
.Их можно увидеть в выходных данных команды jobs
:
$ sleep 10 &
$ sleep 20 &
$ sleep 30 &
$ jobs
[1] Running sleep 10 &
[2]- Running sleep 20 &
[3]+ Running sleep 30 &
+
- самое последнее запущенное задание.-
- самая последняя работа до +
.Оба обновятся, если вы убьете работу или начнете новую.Поэтому вы можете выполнить свой сценарий следующим образом:
#!/bin/bash
while true; do
echo "starting FIRST Consumer.py : $(date +%T)"
python3 /home/irum/Desktop/Marketsyc/Consumer.py &
sleep 20
echo "starting SECOND Consumer.py : $(date +%T)"
python3 /home/irum/Desktop/Marketsyc/Consumer.py &
kill %- # kill FIRST Consumer.py
sleep 20
kill %+ # kill SECOND Consumer.py
done
Это работает надежно, только если Consumer.py
всегда работает дольше 20 секунд.Если Consumer.py
может завершиться до истечения 20 секунд, то мы можем убить не ту работу.Чтобы обойти эту проблему, вы можете использовать (python3 .../Consumer.py; sleep inf) &
вместо python3 .../Consumer.py &
.sleep inf
остановит выполнение задания самостоятельно.