chkconfig $ svc reset如果在启动时被更高的pri init.d服务执行,不会生效

在一个centos 6派生版(Amazon Linux)上,我有一个init.d脚本ecrinit,用于在系统启动时启用/禁用某些服务(基于磁盘上的属性文件的内容):

if [[ "$nodeType" == "foo" ]]; then #turn off mysql, turn on proftpd service mysqld stop chkconfig mysqld off # prevent lower-pri mysqld service from chkconfig proftpd reset # re-enables at run levels 2-4 fi 

由于ecrinit的开始pri是60,proftpd是88,所以我期望后者是通过启动过程启动的,因为上面调用chkconfig reset确保/etc/rc3.d(确认)中存在适当的文件。

但是这似乎并不是这样,因为如果我在执行“init 6”之前发出“chkconfig proftpd off”,那么“start”永远不会在proftpd上被调用(我向后面的脚本的主体添加了一个日志语句来确认)。 换句话说,在执行ecrinit之前,启动过程似乎检查/etc/rc3.d的内容(并且在启动过程中没有检测到相同目录中的新文件)…

这是预期的行为? 如果是这样,我怎样才能控制在一个给定的启动应启用哪些服务(并避免手动启动它们以保持优先顺序)?

启动脚本头

 [root@lb1 ~]# head /etc/init.d/proftpd #!/bin/bash # $Id: proftpd.init,v 1.1 2004/02/26 17:54:30 thias Exp $ # # proftpd This shell script takes care of starting and stopping # proftpd. # # chkconfig: 234 88 12 # description: ProFTPd is an enhanced FTP server with a focus towards \ # simplicity, security, and ease of configuration. \ # It features a very Apache-like configuration syntax, \ [root@lb1 ~]# head /etc/init.d/ecrinit #!/bin/bash # # chkconfig: 234 19 10 # description: Initializes stuff 

chkconfig –list(启动后)

 [root@lb1 rc3.d]$ chkconfig --list proftpd proftpd 0:off 1:off 2:on 3:on 4:on 5:off 6:off [root@lb1 rc3.d]$ chkconfig --list ecrinit ecrinit 0:off 1:off 2:on 3:on 4:on 5:off 6:off 

uname -a Linux 2.6.35.14-97.44.amzn1.i686#1 SMP Mon Oct 24 16:03:22 UTC 2011 i686 i686 i386 GNU / Linux

看看/etc/rc脚本,它执行以下操作:

 for i in /etc/rc$runlevel.d/S* ; do 

该脚本在运行之前已经扩展了可用启动脚本的列表; 通过chkconfig (或直接文件系统操作)所做的更改将不可见。

如果您将逻辑移至启动过程的末尾,则可以明确启动服务:

 if [[ "$nodeType" == "foo" ]]; then #turn off mysql, turn on proftpd service mysqld stop chkconfig mysqld off # prevent lower-pri mysqld service from service protftpd start fi 

在这个例子中,使用chkconfig来启用proftpd可能没有多less意义,因为在下次系统启动的时候,大概这里的逻辑会启动它。

你也可能想要调查傀儡 ,这是擅长做这种事情。