将我的 bash 脚本变成守护进程的选项
Posted
技术标签:
【中文标题】将我的 bash 脚本变成守护进程的选项【英文标题】:option to turn my bash script into a daemon 【发布时间】:2014-07-17 10:10:21 【问题描述】:我有一个运行良好的 bash 脚本来创建一些随机文件。它运行一个循环,创建随机 bin 文件,然后在睡眠时间后重新创建它们。 我想提供一个选项,以便我可以像守护进程一样运行脚本。所以脚本会进入后台,分离标准输入、标准输出和标准错误,甚至可能将自己附加到 init 而不是当前的 bash。 我该怎么做?
脚本在github上:
https://github.com/momeunier/randombin/blob/master/randombin.sh
【问题讨论】:
如果可能的话,我想把它保存在一个文件中。我知道我可以调用 start-stop-daemon 来启动另一个进程,但我宁愿将所有内容都保存在一个文件中。 【参考方案1】:只需运行一个子shell:
function do_something
<stuffs>
( do_something; ) &>/dev/null &
disown
【讨论】:
我会试试的。听起来很有希望 它看起来不错,除了一件事。我的 do_something 函数中有一个无限的 while 循环,我认为它只循环一次。不知道为什么。 如果您想调试守护进程内部的工作方式,请先尝试将输出重定向到文件。如果不是自然脚本错误,则可能是标准输入问题或其他问题:( do_something; ) &>/some/file &
还记得你可以使用bash -x
调试你的脚本。【参考方案2】:
嗯,怎么样:
./randombin.sh >/dev/null 2>&1 &
disown
首先将 stdout 和 stderr 重定向到 /dev/null 并在后台启动脚本。
下一个命令将 init 设置为父级,因此您可以在不退出进程的情况下关闭终端。
【讨论】:
我最好将它作为脚本中的一个选项。像 ./randombin.sh --daemon 让它自己分叉成一个子shell然后:)以上是关于将我的 bash 脚本变成守护进程的选项的主要内容,如果未能解决你的问题,请参考以下文章