Назад | Перейти на главную страницу

Сценарий 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"

Когда я перезагружаю сервер, скрипт работает нормально и запускает HTTP-сервер на 80-м порту. Единственная проблема заключается в том, что скрипт не будет отправлен в фоновый режим или не будет запущен как демон. Интересно, как я могу запустить скрипт во время загрузки в задний план или как демон.

Сам сценарий 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"

На терминале 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, я собираюсь поработать над этим.