Я хочу, чтобы функция bash продолжала работать, даже когда тайм-ауты ssh или терминал закрыты. Поскольку я не хочу создавать новый файл сценария, чтобы вызывать его отдельно, я использовал метод nohup и '&' для достижения своей цели.
(
trap "" HUP
sleep 10
echo 'abc123!' | sudo -S -p '' bash -c "cat /etc/shadow"
ret=$?
if [ $ret -ne 0 ]; then
echo "failed-->$ret" >> /tmp/test.log
fi
)&
Вышеупомянутое является лишь частью моего скрипта, представляющего те, которые должны продолжать работать после того, как его родитель мертв. Скрипт запускается пользователем без полномочий root, поэтому для выполнения некоторых команд необходимо использовать sudo. Этот сценарий успешно возвращается, когда его родитель жив. Но когда вы закроете терминал во время его работы, вы получите «сбой -> 1» в файле test.log после выхода дочернего процесса. Итак, кто-нибудь может сказать мне, что не так со сценарием?
sudo
выполняет свою собственную обработку сигналов и переопределяет вашtrap
. SIGHUP, отправленный пользовательским процессом, будет передан выполняемой им команде, но в вашей системе выполнитеman sudo
и найдитеSignal Handling
для авторитетного ответа. - person cdarke   schedule 06.09.2016shopt -u huponexit
- person cdarke   schedule 06.09.2016bash -c
?cat
— это внешняя программа, не связанная сbash
. - person cdarke   schedule 06.09.2016