有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务。
在解问题之前先来看看Linux的启动流程
Linux的启动流程
主要顺序就是:
1. 加载内核
2. 启动初始化进程
3. 确定运行级别
4. 加载开机启动程序
5. 用户登录
启动流程的具体细节可以看看Linux 的启动流程
第4步加载启动程序其实是两步:
init进程逐一加载开机启动程序,其实就是运行指定目录里的启动脚本。
在运行完指定目录里面的程序后init进程还会去执行/etc/rc.local 这个脚本。
ps:“指定目录”是指在第3步中设置的运行级别对应的目录。
要完成我们的需求,我们使用第4步中的任意一种方式都可以。
下面分别就是这两种方式的具体实现:
1.chkconfig
以supervisord服务脚本为例:
第1步:把上面的脚本放在/etc/init.d/文件夹下。
第2步:将启动脚本权限改为可执行。
第3步:添加启动项。
第4步:检查是否设置成功。
成功~
2.修改/etc/rc.local脚本
/etc/rc.local 脚本内容如下
echo “hello linux” >>/tmp/hello2.log ,就模拟了一个简单的开机启动脚本。
influxd 则就是启动 influxd 服务。
ps: influxd > /tmp/influxd.log 2>&1 &
这样写的意思是让influxd后台执行。
influxd和前面的echo "hello linux"
是不一样的,echo 执行过后就结束了,而influxd则为服务一直执行,如果不后台执行的话则influxd 启动后就不会返回,那么init进程就会一直等待influxd执行完毕,导致后面的程序一直无法执行。
这个着实坑了我一把,当时我写的是:
发现influxd启动成功了,telegraf就是起不来。后来把telegraf写在前面就能起来,但是influxd又起不来了于是就猜测是这个原因~~~bingo。