谈到这个insserv文件(文件位于/sbin/insserv),我们不得不回忆一下,Linux中服务注册的两种方式,一种是init.d的形式,一种systemd的形式
1.Linux中服务启动的方式有两种
- /etc/init.d,对应的服务管理命令为service 服务名 start
例如我们vim mysql,可以看到它也就是一个去启动、
关闭、重启等MySQL数据库的一个shell脚本
service mysql start
service mysql stop
service mysql status
- /etc/systemd/system,下面对应的大都为一些.services文件
对应的服务管理命令为systemctl start 服务名
vim network.service
systemctl start network
systemctl stop network
systemctl status network
2.服务设置为开机自启动,大家都知道使用chkconfig,它是专门用来管理系统服务(service)的命令行工具。
例如我们要设置某个服务为开机自动启动
chkconfig service_name on
重点来了
suse Linux和其它Linux不同的地方在于,suse Linux在使用chkconfig命令时,会用一个perl脚本,也就是文章标题中的insserv文件来检查/etc/init.d下服务脚本中的格式
例如
我们先打开insserv看看,是perl代码,定位到94行
这里这个unless代码块(perl中的unless和if恰恰相反,在false的时候执行)
可以看出有这么一句
unless (s/^#\s//) {
warn "$name: parse error";
$r = undef;
last;
}
我们再打开flashbackup看看
可以看出flashbackup开头连续三个#号的地方,联系insserv的那个判断,不难看出,insserv要求我们要以#号开头,且后面要有空格,然而我们的shell脚本中却出现了连续三个#号,所以报错了,当我将三个#号的地方改为如下图中所示
再回去运行,就正常了
chkconfig flashbackup on
说明:
suse中指定运行级别已经不再是–level了,而是改为了–set了,详细说明可以chkconfig --help查看