如何通过创建启动服务在机器启动时启动 node.js 应用程序

如何通过创建启动服务在机器启动时启动 node.js 应用程序

我的机器是 Ubuntu 16.04。我想在机器每次启动时启动我的 node.js 应用程序。根据这个邮政关于自动启动服务。我尝试通过执行以下操作来创建服务:

1)我创建了一个脚本来使用节点的forever模块启动节点应用程序。

#!/bin/bash

echo "Starting App"

forever -a start /opt/app/app.js

echo "App started"

2)我给这个脚本命名startApp.sh,并将这个脚本放在里面/etc/init.d/文件夹。

3)我运行了命令update-rc.d startApp defaults

但我收到了错误update-rc.d:错误:initscript 不存在:/etc/init.d/startApp

我做错了什么?

答案1

强烈建议您使用 init.d 的“标准”编写服务,这样当另一个了解 init.d 服务的人查看它时,也会减少混淆。请参见以下示例:

#!/bin/sh
#
# Author: Your Name <[email protected]>
#
### BEGIN INIT INFO
# Provides:       Name
# Required-Start: $local_fs $remote_fs
# Required-Stop:  $local_fs $remote_fs
# Should-Start:   $syslog
# Should-Stop:    $syslog
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Add a description here
### END INIT INFO

# Using LSB functions:
. /lib/lsb/init-functions

set -e

NAME="NAME"
DAEMON=/opt/app/app.js
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Function that starts the daemon/service.
d_start() {
        log_daemon_msg "Starting" "$NAME"
        start-stop-daemon --start --quiet --background --pidfile $PIDFILE --make-pidfile --startas $DAEMON
        log_end_msg $?
}

# Function that stops the daemon/service.                                         
d_stop() {                                                                        
        log_daemon_msg ":: stopping" "$NAME"                                      
        start-stop-daemon --stop --pidfile $PIDFILE --retry 10                    
        log_end_msg $?                                                            
}                                                                                 

# Function that sends a SIGHUP to the daemon/service.                             
case "$1" in                                                                      
  start|stop)                                                                     
        d_${1}                                                                    
        ;;                                                                        
  restart|reload|force-reload)                                                    
        d_stop                                                                    
        sleep 1                                                                   
        d_start                                                                   
        ;;                                                                        
  status)                                                                         
        status_of_proc "$NAME" "$DAEMON" && exit 0 || exit $?                     
        ;;                                                                     
  *)                                                                           
        echo "Usage: $SCRIPTNAME {start|stop|restart|status}"                  
        exit 3                                                                 
        ;;                                                                     
esac                                                                           

exit 0

相关内容