如果在启动时由更高优先级的 init.d 服务执行,chkconfig $svc reset 是否不起作用?

如果在启动时由更高优先级的 init.d 服务执行,chkconfig $svc reset 是否不起作用?

在 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 的启动优先级为 60,而 proftpd 的启动优先级为 88,我预计后者将由启动过程启动,因为上面调用 chkconfig reset 确保了 /etc/rc3.d 中存在适当的文件(已确认)。

但事实似乎并非如此,因为如果我在执行“init 6”之前发出“chkconfig proftpd off”,则 proftpd 上永远不会调用“start”(我在后面的脚本主体中添加了一条日志语句来确认)。换句话说,似乎启动过程在执行 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 2011 年 10 月 24 日星期一 16:03:22 UTC i686 i686 i386 GNU/Linux

答案1

看一下/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,因为大概这里的逻辑会在下次系统启动时启动它。

您可能还想调查木偶,它擅长做这种事。

相关内容