Как включить nohup внутри bash script?
У меня есть большой script, называемый mandacalc, который я хочу всегда запускать с помощью команды nohup. Если я вызову его из командной строки как:
nohup mandacalc &
все работает быстро. Но если я попытаюсь включить nohup внутри моей команды, поэтому мне не нужно вводить его каждый раз, когда я его запускаю, появляется сообщение об ошибке.
До сих пор я пробовал следующие параметры:
nohup (
command1
....
commandn
exit 0
)
а также:
nohup bash -c "
command1
....
commandn
exit 0
" # and also with single quotes.
До сих пор я получаю сообщения об ошибках, связанные с реализацией команды nohup, или о других кавычках, используемых внутри script.
приветствий.
Ответы
Ответ 1
Попробуйте поместить это в начало вашего script:
#!/bin/bash
case "$1" in
-d|--daemon)
$0 < /dev/null &> /dev/null & disown
exit 0
;;
*)
;;
esac
# do stuff here
Если теперь вы начинаете свой script с --daemon
в качестве аргумента, он перезагружается сам из вашей текущей оболочки.
Вы все еще можете запустить script "на переднем плане", запустив его без этой опции.
Ответ 2
Создайте псевдоним с тем же именем в файле запуска bash (или предпочитаемой оболочки):
alias mandacalc="nohup mandacalc &"
Ответ 3
Здесь есть приятный ответ: http://compgroups.net/comp.unix.shell/can-a-script-nohup-itself/498135
#!/bin/bash
### make sure that the script is called with `nohup nice ...`
if [ "$1" != "calling_myself" ]
then
# this script has *not* been called recursively by itself
datestamp=$(date +%F | tr -d -)
nohup_out=nohup-$datestamp.out
nohup nice "$0" "calling_myself" "[email protected]" > $nohup_out &
sleep 1
tail -f $nohup_out
exit
else
# this script has been called recursively by itself
shift # remove the termination condition flag in $1
fi
### the rest of the script goes here
. . . . .
Ответ 4
Почему бы вам просто не сделать script содержащий nohup ./original_script
?
Ответ 5
Просто введите trap '' HUP
в начало вашего script.
Также, если он создает дочерний процесс someCommand&
, вам придется изменить их на nohup someCommand&
для правильной работы... Я изучал это в течение длительного времени и только комбинация этих двух (ловушка и nohup) работает над моей конкретной script, где xterm закрывается слишком быстро.