FreeBSD rc.d脚本不作为守护进程启动

我在位置/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服务器。唯一的问题是脚本不会被发送到后台或不会作为守护进程启动。 我想知道如何在后台运行脚本或作为守护进程运行脚本。

RC脚本本身并不是要守护进程,而是期望启动和停止守护进程。

如果您的服务没有选项作为守护进程启动,则可以使用守护进程(8)来pipe理该部分。

一个例子:

 #!/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" 

在FreeBSDterminal上我安装了PM2 :

 $ sudo npm install pm2 -g 

然后根据pm2修改rc.d脚本:

 #!/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服务器在启动时作为守护进程启动。 不过,我真的很喜欢@RichardSmithbuild议的FreeBSD 守护进程(8)的想法,我正在研究它。