Я хочу запустить сценарий оболочки на выходных, но я хочу убедиться, что, если терминал потеряет соединение, мой сценарий не будет прерван. Я использую nohup для всего вызова скрипта, но я также хочу выполнить некоторую часть моего скрипта оболочки таким образом, чтобы, если кто-то закроет мой терминал, мой скрипт все еще работал в фоновом режиме. Вот простой пример:
#!/bin/bash
echo "Start the trap"
trap " " HUP
echo "Sleeping for 60 Seconds"
sleep 60 echo "I just woke up!"
Пожалуйста, подскажите, что мне делать? Ловушка "" HUP кажется не работает, когда я закрываю вкладку терминала.
Вы рассматривали возможность использования screen
вместо nohup
подходить?
Откройте сеанс экрана и выполните сценарий как обычно. Отключитесь от сеанса, используя Ctrl-a Ctrl-d
.
Когда вы вернетесь, вы можете повторно подключиться к сеансу, используя screen -r
или, возможно, screen -ls
и выбрав нужный сеанс для восстановления.
Также см: Как повторно подключиться к отключенному сеансу ssh
Я уверен, что хочешь trap "" HUP
. не trap " " HUP
.
ловушка [-lp] [[аргумент] спецификация_сигнала ...]
ARG - это команда для чтения и выполнения, когда оболочка получает сигнал (ы) SIGNAL_SPEC. Если ARG отсутствует (и предоставляется единственный SIGNAL_SPEC) или «-», каждый указанный сигнал сбрасывается в исходное значение. Если ARG - это нулевая строка, каждый SIGNAL_SPEC игнорируется оболочкой и командами, которые она вызывает.
В " "
не является пустой строкой, но ""
является.