我的机器是 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