web-dev-qa-db-ja.com

chkconfig $ svcリセットは、起動時に高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のstartpriは60で、proftpdのstart priは88なので、上記のchkconfig resetを呼び出すと、適切なファイルが/etc/rc3.dに確実に存在するため、後者はブートプロセスによって開始されると予想しました(確認済み)。

しかし、「init 6」を実行する前に「chkconfigproftpd 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

name -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

1
Nikita

/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を有効にすることには、おそらくあまり意味がありません。おそらく、ここのロジックは、次にシステムが起動したときにとにかく起動するからです。

puppet を調査することもできます。これは、まさにこの種のことを行うのが得意です。

2
larsks