linux中/etc/init.d设置开机启动
笔者最近要把写的脚本程序设置为开机启动,而且要把这个脚本做成服务放置在/etc/init.d目录下,和其他服务一样,比如mysql,可以允许命令service mysql start/stop/restart或者/etc/init.d mysql start/stop/restart来执行。用户在启用相应服务时, 就不用进行太复杂的设置。 当服务终止时, 操作系统也能根据脚本的定义, 自动回收相关资源。 用户还能把重要的服务设置成开机启动, 省去了手动开启的麻烦。/etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link)。
想到笔者以前做过树莓派来建立adsb接收基站,不妨把他的找出来看看,一个服务到底一个怎么写,有啥格式?
dump服务,脚本把进程包装成了一个服务, 定义了它在启动、 重启和终止时的具体行为。
#!/bin/bash
### BEGIN INIT INFO
# Provides: dump1090
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: dump1090 initscript
PROG="dump1090"
PROG_PATH="/root/dump1090"
PROG_ARGS=" --net --net-sbs-port 30003"
PIDFILE="/var/run/$PROG.pid"
DELAY=5
start() {
if [ -e $PIDFILE ]; then
echo "Error! $PROG is currently running!" 1>&2
exit 1
else
cd $PROG_PATH
./$PROG $PROG_ARGS 2>&1 >/dev/null &
echo "$PROG started, waiting $DELAY seconds..."
touch $PIDFILE
fi
}
stop() {
if [ -e $PIDFILE ]; then
echo "$PROG is running"
killall $PROG
rm -f $PIDFILE
echo "$PROG stopped"
else
echo "Error! $PROG not started!" 1>&2
exit 1
fi
}
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
case "$1" in
start)
start
exit 0
;;
stop)
stop
exit 0
;;
reload|restart|force-reload)
stop
start
exit 0
;;
**)
echo "Usage: $0 {start|stop|reload}" 1>&2
exit 1
;;
esac
case "$1"就是读取dump命令后的第一个参数的值,分别对应不同的执行函数来操作。本服务脚本有三个函数 start、stop、 reload|restart|force-reload,对应着上面定义的函数。
服务放在这个脚本下,还需要关联服务,chkconfig --add dump 。在chkconfig工具服务列表中增加此服务,此服务会在/etc/rc.d/rcN.d中赋予K/S入口了。chkconfig --level 2345 dump on,修改start运行级别设置为2345,。chkconfig --level 16 dump off,修改stop运行级别为16。需要要注意的是,dump脚本需要设置X执行权限哦。 chkconfig -list可以显示所有运行级系统服务的运行状态信息(on或off)。