仅当给出 --daemon 标志时,如何守护 bash 脚本?

仅当给出 --daemon 标志时,如何守护 bash 脚本?

我有我的script.sh,并希望用./script.sh或运行它./script.sh --daemon,让它保持在前台,除非给出了 --daemon 标志,在这种情况下它应该分离并适当地进入后台。我希望脚本看起来像

[function definitions]

process_args

if [ "$BECOME_DAEMON" == "1" ]; then
    become_daemon
fi

while true; do
    read line <controller_fifo
    do_command $line
done

是否有可能获得我想要的行为?如果可以,我需要为 become_daemon 填写什么?如果不行,最好的替代方案是什么?

答案1

我发现以下方法有效:

[function definitions]

process_args

function command_loop {
    trap handle_term SIGTERM

    while true; do
        read line <controller_fifo && do_command $line &
        wait
    done
}

if [ "$BECOME_DAEMON" == "1" ]; then
    command_loop &> /dev/null &
    disown
else
    command_loop 
fi

请注意,此方法在两种情况下(守护进程或无守护进程)都能正常处理 SIGTERM 信号,而我发布的原始读取循环不会处理信号(直到另一个读取行之后才会调用信号处理程序)。

相关内容