自守护bash脚本
我想使脚本成为自后台监控,即不需要在shell提示符下手动调用自守护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
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