自守护bash脚本

自守护bash脚本,bash,daemon,Bash,Daemon,我想使脚本成为自后台监控,即不需要在shell提示符下手动调用nohup$script&>/dev/null& 我的计划是创建一段代码,如下所示: #!/bin/bash SCRIPTNAME="$0" ... # Preps are done above if [[ "$1" != "--daemonize" ]]; then nohup "$SCRIPTNAME" --daemonize "${PARAMS[@]}" &>/dev/null & ex

我想使脚本成为自后台监控,即不需要在shell提示符下手动调用
nohup$script&>/dev/null&

我的计划是创建一段代码,如下所示:

#!/bin/bash
SCRIPTNAME="$0"

...

# Preps are done above
if [[ "$1" != "--daemonize" ]]; then
    nohup "$SCRIPTNAME" --daemonize "${PARAMS[@]}" &>/dev/null &
    exit $?
fi

# Rest of the code are the actual procedures of the daemon
这明智吗?你有更好的选择吗?

以下是我看到的

if [[ $1 != "--daemonize" ]]; then  
这不应该是
==--daemonize吗?

nohup $SCRIPTNAME --daemonize "${PARAMS[@]}" &>/dev/null &
不需要再次调用脚本,只需调用放置在后台的子shell即可:

(
    Codes that run in daemon mode.
) </dev/null >/dev/null 2>&1 &
disown
(
在守护程序模式下运行的代码。
)/dev/null 2>&1&
否认

函数守护程序\u模式{
在守护程序模式下运行的代码。
}
守护程序模式/dev/null 2>&1&
否认

至少应在
$SCRIPTNAME
$1
周围使用双引号;否则,如果这些值中有空格,您就会遇到麻烦。@Alfe您是对的。我忘了双引号了。谢谢你指出这一点!在上一版本中不需要括号。函数将在新的子shell中运行,因为&。哦,是的。我刚刚添加了
功能
功能,所以我没有注意到,非常感谢。啊,谢谢!是的,看起来更优雅。
[[“$1”!=--daemonize]]
是正确的。基本上,如果未使用
--daemonize
参数调用脚本,它将通过
--daemonize
参数重新启动自身。但是,我可以看出您的解决方案要优雅得多,因此测试是没有意义的。非常感谢。
function daemon_mode {
    Codes that run in daemon mode.
}

daemon_mode </dev/null >/dev/null 2>&1 &
disown