有没有一种简单的方法来创建 FreeBSD rc 脚本?

有没有一种简单的方法来创建 FreeBSD rc 脚本?

我有一个 FreeBSD 监狱,我在其中使用以下命令运行服务器:

/usr/sbin/daemon /path/to/script.py

目前我每次重新启动机器并且监狱启动时都必须运行此命令。我想让这个命令从 开始/etc/rc。有没有一种简单的方法来为命令创建 FreeBSD rc 脚本daemon


更新:我通读了这个关于 rc 脚本的 BSD 文档,然后我在 中创建了以下脚本/etc/rc.d/pytivo

#!/bin/sh

. /etc/rc.subr

name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"

command="/usr/sbin/daemon -u jnet $procname"

load_rc_config $name
run_rc_command "$1"

这可以在监狱启动时启动我想要作为守护进程的Python脚本...(给出的pytivo_enable="YES"是在/etc/rc.conf)但rc脚本不知道守护进程是否正在运行(它认为它不是在运行时)并且当我尝试启动它时它会发出警告:

[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]# 

所以就是关闭,和它作品,但我觉得我应该能够获得比这更好的功能。

答案1

command不应包含多个单词。这就是您看到的错误的原因[。您应该单独设置任何标志。

另外,您应该使用pytivo_user来设置正在运行的 uid,而不是daemon -u.请参阅rc.subr(8)所有这些神奇变量的手册页。

另外,您应该让 rc 子系统知道 pytivo 是一个 Python 脚本,以便它在检查进程是否正在运行时可以找到该进程。

最后,您应该使用惯用语set_rcvarfor rcvar

像这样的东西(我不确定这是正确的Python路径):

#!/bin/sh

# REQUIRE: LOGIN

. /etc/rc.subr

name=pytivo
rcvar=`set_rcvar`
command=/usr/local/pytivo/pyTivo.py
command_interpreter=/usr/local/bin/python
pytivo_user=jnet
start_cmd="/usr/sbin/daemon -u $pytivo_user $command"

load_rc_config $name
run_rc_command "$1"

答案2

如果您不需要 rc 脚本,则可以仅使用 /etc/rc.local。

对于您的 rc 脚本,您缺少依赖注释,至少一行

# REQUIRE: LOGIN

应该有帮助,它在正确的时间运行。

您可能还需要定义一个 pidfile

pytivo_pidfile="/path/to/your/pidfile"

相关内容