Jos*_*osh 9 startup freebsd jails shell-script daemon
我有一个 FreeBSD jail,我在其中使用以下命令运行服务器:
/usr/sbin/daemon /path/to/script.py
Run Code Online (Sandbox Code Playgroud)
目前,每次我重新启动机器和监狱启动时,我都必须运行这个命令。我想让这个命令从/etc/rc
. 有没有一种简单的方法可以为daemon
命令创建 FreeBSD rc 脚本?
更新:我通读了有关 rc scripts 的 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"
Run Code Online (Sandbox Code Playgroud)
这可以在监狱启动时启动我想要作为守护进程的 python 脚本......(给定pytivo_enable="YES"
是 in /etc/rc.conf
)但是 rc 脚本不知道守护进程是否正在运行(它认为它不是在运行时)和当我尝试启动它时它会发出警告:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Run Code Online (Sandbox Code Playgroud)
所以它很接近,并且有效,但我觉得我应该能够获得比这更好的功能。
aec*_*ley 11
command
不应包含多个单词。这就是[
您看到的错误的原因。您应该单独设置任何标志。
此外,您应该使用pytivo_user
来设置正在运行的 uid,而不是daemon -u
. 有关所有这些魔法变量,请参阅rc.subr(8)手册页。
此外,您应该让 rc 子系统知道 pytivo 是一个 Python 脚本,以便它可以在检查进程是否正在运行时找到该进程。
最后,您应该使用惯用语set_rcvar
for 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"
Run Code Online (Sandbox Code Playgroud)