![FreeBSD rc.d 脚本无法作为守护进程启动](https://linux22.com/image/710436/FreeBSD%20rc.d%20%E8%84%9A%E6%9C%AC%E6%97%A0%E6%B3%95%E4%BD%9C%E4%B8%BA%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E5%90%AF%E5%8A%A8.png)
我已经在以下位置开发了以下脚本/usr/local/etc/rc.d/bluesky
#!/bin/sh
# PROVIDE: bluesky
# REQUIRE: mysql sshd
# BEFORE:
# KEYWORD:
. /etc/rc.subr
name="bluesky"
rcvar=bluesky_enable
start_cmd="${name}_start"
stop_cmd=":"
load_rc_config $name
: ${bluesky_enable:=no}
: ${bluesky_msg="HTTP server starts ..."}
bluesky_start(){
echo $PATH
export PATH=$PATH:/usr/local/bin/
echo $PATH
### Run Node server ###
/usr/local/bin/node /usr/home/ict/Documents/bluesky/server.js
echo "$bluesky_msg"
}
run_rc_command "$1"
/etc/rc.conf
我也在我的文件上启用了它:
bluesky_enable="YES"
当我重新启动服务器时,脚本运行正常并在端口 80 启动 HTTP 服务器。唯一的问题是脚本不会被发送到后台或不会作为守护进程启动。我想知道如何在启动时运行脚本背景或者作为守护进程。
答案1
RC 脚本本身并不用于守护进程,但可以启动和停止守护进程。
如果你的服务没有以守护进程启动的选项,你可以使用守护进程(8)来管理那部分。
一个例子:
#!/bin/sh
# PROVIDE: ...
# REQUIRE: ...
. /etc/rc.subr
name="..."
rcvar=${name}_enable
pidfile="/var/run/${name}.pid"
command="/usr/sbin/daemon"
command_args="-c -f -P ${pidfile} -r /usr/local/libexec/${name}"
load_rc_config $name
run_rc_command "$1"
答案2
在 FreeBSD 终端上我安装了PM2:
$ sudo npm install pm2 -g
然后rc.d
根据以下内容修改脚本pm2
:
#!/bin/sh
# PROVIDE: bluesky
# REQUIRE: mysql sshd
# BEFORE:
# KEYWORD:
. /etc/rc.subr
name="bluesky"
rcvar=bluesky_enable
start_cmd="${name}_start"
stop_cmd=":"
load_rc_config $name
: ${bluesky_enable:=no}
: ${bluesky_msg="HTTP server starts ..."}
bluesky_start(){
echo $PATH
export PATH=$PATH:/usr/local/bin/
echo $PATH
### Start server with PM2 ###
/usr/local/bin/pm2 start /usr/home/ict/Documents/bluesky/server.js
echo "$bluesky_msg"
}
run_rc_command "$1"
现在,HTTP 服务器在启动时作为守护进程启动。不过我非常喜欢 FreeBSD 的想法守护进程(8)由@RichardSmith 建议,我将进行研究。