Я разработал следующий сценарий на месте /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, я собираюсь поработать над этим.