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