Назад | Перейти на главную страницу

ловушка «» HUP против Nohup? Как я могу запустить часть сценария оболочки в режиме nohup?

Я хочу запустить сценарий оболочки на выходных, но я хочу убедиться, что, если терминал потеряет соединение, мой сценарий не будет прерван. Я использую 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 игнорируется оболочкой и командами, которые она вызывает.

В " " не является пустой строкой, но "" является.