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