Freebsd
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 腳本本身並不打算用於守護程序,而是希望啟動和停止守護程序。
如果您的服務沒有作為守護程序啟動的選項,您可以使用daemon(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"
在 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 伺服器在引導時作為守護程序啟動。不過,我真的很喜歡@RichardSmith 建議的 FreeBSD守護程序 (8)的想法,我將繼續努力。