Я плохо знаком со сценариями оболочки. Скажите, я запускаю сценарий как это. Это работает в течение 3 дней. Так, я запущу сценарий удаленно через ssh и затем закрою мой локальный терминал.
start.sh
end=$((SECONDS+259200))
x=1
while [ $SECONDS -lt $end ]
do
#Some command
done
Как я запишу a stop.sh
остановить сценарий каждый раз, когда я хочу остановить его? Я могу изменить start.sh
также в случае необходимости.
Несколько путей:
pkill -f start.sh
Это уничтожит любой процесс с start.sh
в его командной строке, с помощью pkill
.
Измените сценарий для сохранения его PID где-нибудь:
#! /bin/bash
echo $$ >> /tmp/start_sh.pid
end=...
И скажите stop.sh
уничтожить процесс с PID там:
#! /bin/bash
kill $(cat /tmp/start_sh.pid) || echo "Process is not running."
Это уничтожит все script.sh
процессы.
start.sh
Сказать start.sh
читать из некоторого файла, говорящего для выхода:
#! /bin/bash
...
while [ $SECONDS -lt $end ]
do
[[ $(cat ~/kill_start.txt) == "KILL" ]] && exit 1
...
И скажите stop.sh
для записи "УНИЧТОЖАЮТ" в тот файл:
#! /bin/bash
echo "KILL" > ~/kill_start.sh
Это уничтожит все экземпляры start.sh
, когда следующее повторение каждого сценария выполнения.
(Несмотря на имя kill_start.sh
не сценарий.)
С другой стороны, можно выполнить фоновое задание в сценарии для наблюдения за изменениями в ~/kill_start.sh
:
#! /bin/bash
...
[[ -p ~/kill_script.sh ]] && mkfifo ~/kill_script.sh
(read -N 0 < ~/kill_script && [[ $REPLY == "KILL" ]] && kill 0) &
while [ $SECONDS -lt $end ]
do
...
В stop.sh
, повторите что-либо к ~/kill_script
:
#! /bin/bash
echo anything at all
Это будет использовать mkfifo
сделать именованный канал. Затем read
попытается читать из того канала и будет ожидать, пока это не получает входа вообще, затем продолжите выходить. Это должно вступить в силу почти сразу.
screen
С screen
, можно запустить оболочку через SSH, закрыть соединение и затем возобновить его позже. Таким образом, можно запустить a screen
сессия для сценария, закройте свое соединение, уезжайте в отпуск, возвратитесь, вспомните свое экранное соединение и уничтожьте использование сценария CtrlC.