测试系统:Debian 8.3
1.相关背景知识
1.1 系统启动级别
$ sudo runlevel N 5
运行级别即操作系统当前正在运行的功能级别。
这个级别从1到6 ,具有不同的功能。
不同的运行级定义如下:
# 0 - 停机
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动
1.2 系统启动初始化配置
rc*.d 和 rc.local 目录是系统初始化配置目录,系统初始化都在这里加载:
$ ls -l /etc/rc3.d lrwxrwxrwx 1 root root 14 Sep 12 2012 K91capi -> ../init.d/capi lrwxrwxrwx 1 root root 25 Sep 12 2012 K99readahead_later -> ../init.d/readahead_later lrwxrwxrwx 1 root root 23 Sep 12 2012 S00microcode_ctl -> ../init.d/microcode_ctl lrwxrwxrwx 1 root root 22 Sep 12 2012 S02lvm2-monitor -> ../init.d/lvm2-monitor
注:K开头的服务被关闭,S开头的服务被开启,K在S开始之前执行,在执行过程中按照数字来定义优先级,数字越低优先级越高。
从上面的实例可以看到,该目录下的文件其实都是指向 ../init.d 目录下的软连接
init.d 是所有的初始化文件的存放目录,初始化脚本应该放在这里,然后在相应的配置目录 /etc/rc*.d 建立软连接:
$ ls -l /etc/init.d -rwxr-xr-x 1 root root 1566 Dec 17 2009 acpid -rwxr-xr-x 1 root root 1441 Dec 18 2006 anacron -rwxr-xr-x 1 root root 1284 Nov 16 2009 atd -rwxr-xr-x 1 root root 3328 Dec 10 2009 auditd -rwxr-xr-x 1 root root 3052 Mar 16 2010 autofs
2.创建一个开机启动脚本
2.1 在 /etc/init.d 下创建脚本,修改脚本操作权限为可执行
$ sudo vi startRun.sh #!/bin/sh ### BEGIN INIT INFO # Provides: startRun # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start run script ### END INIT INFO nohup java -jar /home/windyofsky/RunTest.jar > /home/windyofsky/test1.log & echo "SUCCESS" > /home/windyofsky/test2.log
注意,脚本中的初始化信息必须要有,否则不会被执行的。
$ sudo chmod 755 startRun.sh
修改脚本为可执行。
2.2 创建初始化配置的软连接
$ sudo ln -s /etc/init.d/startRun.sh /etc/rc3.d/S900startRun
这里,我将脚本放到了rc3.d中,并设为S900;通常应该放在级别3~5中,太早可能会因为一些服务尚未启动而执行失败。
2.3 重启系统,查看效果
$ cat /home/windyofsky/test1.log $ cat /home/windyofsky/test2.log