将我的 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; ) &amp;&gt;/some/file &amp; 还记得你可以使用bash -x调试你的脚本。【参考方案2】:

嗯,怎么样:

./randombin.sh >/dev/null 2>&1 &
disown

首先将 stdout 和 stderr 重定向到 /dev/null 并在后台启动脚本。

下一个命令将 init 设置为父级,因此您可以在不退出进程的情况下关闭终端。

【讨论】:

我最好将它作为脚本中的一个选项。像 ./randombin.sh --daemon 让它自己分叉成一个子shell然后:)

以上是关于将我的 bash 脚本变成守护进程的选项的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的php脚本以守护进程的方式一直运行

为啥我必须 sudo 来自守护进程的命令?

linux 脚本--守护进程

如何指定守护进程的日志和pid目录?

守护进程的编写

Mac OSX 上的 XAMPP:为啥作为“守护进程”运行? [关闭]