基础知识
一些Linux发行版使用一个表来管理在系统开机时要自动启动的进程。在
Linux系上,这个表通常位于专门文件/etc/inittab中。另外一些系统
(比如现在流行的Ubuntu Linux发行版)则采用/etc/init.d目录,将开机时
启动或停止某个应用的脚本放在这个目录下。这些脚本通过/etc/rcX.d目录
下的入口(entry)启动,这里的X代表运行级(run level)。
Linux操作系统的init系统采用了运行级。运行级决定了init进程运行
/etc/inittab文件或/etc/rcX.d目录中定义好的某些特定类型的进程。
Linux操作系统有5个启动运行级。
运行级为1时,只启动基本的系统进程以及一个控制台终端进程。
我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧的文件系统
维护。显然,在这种模式下,仅有一个人(通常是系统管理员)能登录到系统上
操作数据。
标准的启动运行级是3。在这个运行级上,大多数应用软件,比如网络支持
程序,都会启动。另一个Linux中常见的运行级是5。在这个运行级上系统会启动
图形化的X Window系统,允许用户通过图形化桌面窗口登录系统
Linux系统可以通过调整启动运行级来控制整个系统的功能。通过将运行级
从3调整成5,系统就可以从基于控制台的系统变成更先进的图形化
X Window系统。
正文
既然知道了,ubuntu系统启动的时候,会启动加载/etc/init.d文件夹下的
shell脚本,那么我们就可以把自己想要自启动的应用写到脚本中去,然后让其开机
的时候自己加载就好了。但是注意一点,放到/etc/init.d的shell脚本跟普通的
脚本不太一样。下面来区分下不同之处。
- 第一行
第一行必须要有类似这种的:#!:
#!/bin/bash
- 必须要有以下这些描述中的某些内容:
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $portmap
# Should-Stop: $portmap
# X-Start-Before: nis
# X-Stop-After: nis
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
其实这些内容是在/etc/init.d中的README文件中的。接下来我就写一个例子
来说明一下。我是用的docker-compose启动一些容器的:
#!/bin/bash
### BEGIN INIT INFO
# Provides: kubefate
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: docker docker-compose
# Should-Stop: docker docker-compose
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start the kubefate service
### END INIT INFO
/usr/local/bin/docker-compose -f /data/projects/fate/confs-9999/docker-compose.yml start
/usr/local/bin/docker-compose -f /data/projects/fate/serving-9999/docker-compose.yml start
exit 0
然后接下来:
1.创建软docker-compose连接:
cd /usr/local/bin && ln -s /usr/bin/docker-compose
2.把这个文件(kubefate-start.sh)放到/etc/init.d目录下;
然后修改下权限:sudo chmod +x kubefate-start.sh
3.注意把脚本中的docker-compose.yml文件的路径改下
4.sudo update-rc.d kubefate-start.sh defaults
5.reboot
完成
到此为止。