我在位置/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)的想法,我正在研究它。