0x1
机器重启后某个网盘服务无法使用,只能出现登录页面,但是登录后的页面无内容。通过排查是服务有两个启动脚本,重启机器后只启动了一个,于是手动启动另一个后访问正常。
0x2
这个问题其实已经遇到了几次了,之前都是手动启动解决,没有深究为什么。所以今天在这里讨论下。如果分析其中一个服务脚本无法自启原因,那么可能性如下:
- 对端的数据库未启动,此脚本的服务无法链接,最后启动失败
- 脚本本身有问题,无法自启
- 没有加入到开机自启
- 启动顺序问题,脚本无法在另一个脚本之前启动
分别根据上面的问题做分析:
- 排查对端数据库已经启动,并且服务正常
- 启动脚本应该没有问题,因为使用 service 命令启动正常
- 使用 chkconfig 命令查看服务脚本的启动级别是 2345
- 最大的可能性是此问题
0x3
现在我们分别查看两个脚本的启动级别和启动优先级,发现需要手动处理的脚本优先级更高,而我们手动处理的时候都是后启动,那么基本上可以确定是此问题。修改脚本中 chkconfig 后面的优先级更低即可
0x4 概念
在服务器脚本中,启动优先级和启动级别可以定义如下:
#!/bin/bash
#
# chkconfig: 2345 95 20
这里分别表示,在linux的2345级别会启动,启动优先级是95,关闭优先级是20。其中优先级数字越大那么优先级越低,也就启动的越晚,一些系统低级别的服务,如网络等的优先级可能是个位数。
接下来就是就是设置了优先级后,脚本原本是放置在 /etc/rc.d/init.d/下,但会在 /etc/rc.d/的rc0.d,rc1.d,rc2.d,rc3.d,rc4.d,rc5.d,rc6.d下创建软连接文件,创建和命名规范如下:
- 启动以S开头,加上启动优先级的数字
- 关闭以K开头,加上关闭优先级的数字
- 在哪些目录下创建,取决于设置的启动级别,如果一个脚本设置的2345启动,那么在0,1,6的目录下会创建K的链接,在2345下创建S链接