如何在bash脚本中包含nohup?

时间:2011-05-29 16:06:44

标签: bash shell unix nohup

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

nohup mandacalc &
一切都运行得很快。但是,如果我尝试在命令中包含 nohup ,那么每次执行时我都不需要输入它,我会收到一条错误消息。

到目前为止,我尝试了以下选项:

nohup (
command1
....
commandn
exit 0
)

还有:

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

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

欢呼声。

5 个答案:

答案 0 :(得分:16)

尝试将其放在脚本的开头:

#!/bin/bash

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

# do stuff here

如果您现在以--daemon作为参数启动脚本,它将从当前shell重新启动它。

您仍然可以在没有此选项的情况下启动“在前台”运行脚本。

答案 1 :(得分:4)

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

alias mandacalc =“nohup mandacalc&amp;”

答案 2 :(得分:3)

答案 3 :(得分:2)

为什么不制作包含nohup ./original_script的脚本?

答案 4 :(得分:1)

只需将trap '' HUP放在脚本的开头即可。

此外,如果它创建子进程someCommand&,您必须将它们更改为nohup someCommand&才能正常工作...我已经研究了很长时间并且只研究了这两个进程( trap和nohup)适用于我的特定脚本,其中xterm关闭得太快。