выход из сценария оболочки с фоновыми процессами - PullRequest
7 голосов
/ 14 ноября 2011

Мне нужно как-то выйти из моего script.sh (с кодом возврата - лучше всего), который запускает некоторые другие команды и другие скрипты в фоновом режиме.*

nohup myInScript.sh &

также я пытался использовать в конце script.sh

disown -a[r]

, а также я пытался убить его

kill $$ 

носкрипт просто зависает после последней команды и не завершается.Как заставить его выйти после запуска своих команд?пожалуйста, помогите.

edit: Если быть более точным, я запускаю скрипт удаленно через ssh на другом компьютере.

Ответы [ 2 ]

12 голосов
/ 14 ноября 2011

Из памяти оболочка входа в систему будет храниться, даже когда она завершится, если у любого из ее все еще работающих потомков будут открыты стандартные (терминальные) дескрипторы файлов. Нормальные (субпроцессные) оболочки, похоже, не страдают от этого. Посмотрите, имеет ли какое-либо значение изменение строки nohup на следующую.

nohup myInScript.sh >some.log 2>&1 </dev/null &

На Centos5 у меня не возникает проблема, если я запускаю parent.sh. Но я делаю, если я бегу ssh localhost parent.sh. В этом случае перенаправление ввода / вывода, которое я показал выше, решает проблему.

3 голосов
/ 30 июля 2015

Решение выше работает большую часть времени:

nohup myInScript.sh >some.log 2>&1 </dev/null &

Но у меня был случай, когда этого не произошло, не знаю почему. В любом случае команда at добилась цели и даже выглядит более стильно:

at now -f my_script.sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...