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

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

答案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 建议,我将进行研究。

相关内容