unix 如何在bash脚本中包含nohup?

pqwbnv8z  于 2022-11-04  发布在  Unix
关注(0)|答案(6)|浏览(206)

我有一个名为mandacalc的大型脚本,我希望始终使用nohup命令运行该脚本。如果我从命令行调用它,如下所示:

nohup mandacalc &

但是,如果我试图在命令中包含nohup,这样我就不需要在每次执行它时都输入它,我会得到一个错误消息。
到目前为止,我尝试了以下选项:

nohup (
command1
....
commandn
exit 0
)

以及:

nohup bash -c "
command1
....
commandn
exit 0
" # and also with single quotes.

到目前为止,我只收到了抱怨nohup命令实现或脚本中使用的其他引号的错误消息。
干杯。

vojdkbi0

vojdkbi01#

试着在脚本的开头添加以下内容:


# !/bin/bash

case "$1" in
    -d|--daemon)
        $0 < /dev/null &> /dev/null & disown
        exit 0
        ;;
    *)
        ;;
esac

# do stuff here

如果现在使用--daemon作为参数启动脚本,它将重新启动自己,并从当前shell分离。
您仍然可以通过在不使用此选项的情况下启动脚本来“在前台”运行脚本。

qnyhuwrf

qnyhuwrf2#

只需在脚本的开头加上trap '' HUP即可。
此外,如果它创建了子进程someCommand&,则必须将其更改为nohup someCommand&才能正常工作......我已经对此进行了很长时间的研究,只有这两个(trap和nohup)的组合才能在我的特定脚本中工作,其中xterm关闭得太快。

fquxozlt

fquxozlt3#

在bash(或首选shell)启动文件中创建一个同名别名:

alias mandacalc="nohup mandacalc &"
dwbf0jvd

dwbf0jvd4#

为什么不直接写一个包含nohup ./original_script的脚本呢?

vybvopom

vybvopom5#

这里有一个很好的答案: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" "$@" > $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

. . . . .
gdrx4gfi

gdrx4gfi6#

处理这种情况的最好方法是使用$()

nohup $( command1, command2 ...) &

nohup需要一个命令,这样您就可以使用一个nohup执行多个命令

相关问题