Назад | Перейти на главную страницу

chkconfig $ svc reset не вступает в силу, если выполняется службой 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

Поскольку start pri для ecrinit равен 60, а proftpd - 88, я ожидал, что последний будет запущен процессом загрузки, поскольку вызов chkconfig reset выше гарантировал, что соответствующие файлы существуют в /etc/rc3.d (подтверждено).

Но, похоже, это не так, поскольку 'start' никогда не вызывается в proftpd (я добавил оператор журнала в тело последнего скрипта для подтверждения), если я запускаю 'chkconfig proftpd off' перед выполнением 'init 6'. Другими словами, кажется, что процесс загрузки проверяет содержимое /etc/rc3.d перед запуском ecrinit (и не обнаруживает новые файлы в том же каталоге во время процесса загрузки) ...

Это ожидаемое поведение? Если да, то как я могу контролировать, какие службы должны быть включены при данном запуске (и не запускать их вручную, чтобы сохранить порядок приоритета)?

заголовки сценария запуска

[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 в этом примере, поскольку, по-видимому, здесь логика все равно запустит его при следующей загрузке системы.

Вы также можете исследовать кукольный, который хорош именно для этого.