LINUX.ORG.RU
решено ФорумAdmin

Пятничный тупняк с init.d


0

1

Заметил, что некорректно останавливаются некоторые демоны при рестарте. Решил потестировать и вот что получилось:

[root@db ~]# cat /etc/init.d/testinit 
#!/bin/bash
# chkconfig: 234 99 1

case $1 in
start)
echo "`date` Starting..." >> /root/testinit
;; 
stop)   
echo "`date` Stopping..." >> /root/testinit
;; 
esac    
exit 0
[root@db ~]# chkconfig testinit --add
[root@db ~]# chkconfig testinit --list
testinit       	0:off	1:off	2:on	3:on	4:on	5:off	6:off
[root@db ~]# find /etc/rc.d/ -name '*testinit*'
/etc/rc.d/rc3.d/S99testinit
/etc/rc.d/init.d/testinit
/etc/rc.d/rc2.d/S99testinit
/etc/rc.d/rc0.d/K01testinit
/etc/rc.d/rc1.d/K01testinit
/etc/rc.d/rc6.d/K01testinit
/etc/rc.d/rc5.d/K01testinit
/etc/rc.d/rc4.d/S99testinit
И после пары ребутов:
[root@db ~]# cat testinit 
Fri Jul 26 15:53:27 MSK 2013 Starting...
Fri Jul 26 15:58:12 MSK 2013 Starting...
OC - CentOS 6.4. Где я ошибся? Почему не запускаются K01testinit скрипты?

А ты представь, что бы произошло, будь у тебя systemd. Всё же лучше синица в руке.

anonymous
()
Ответ на: комментарий от anonymous

systemd, честно говоря, вобще не видел. Мне интересно, в чём дело может быть здесь?

generator ★★★
() автор топика
/etc/rc.d/init.d/testinit
/etc/rc.d/rc2.d/S99testinit
/etc/rc.d/rc0.d/K01testinit
/etc/rc.d/rc1.d/K01testinit
/etc/rc.d/rc6.d/K01testinit
/etc/rc.d/rc5.d/K01testinit
/etc/rc.d/rc4.d/S99testinit

а они ссылки на /etc/init.d/testinit посмотрите еще программа должна быть, update-rc.d или аналог для centos, без нее все равно не заработает.

еще проверь в файле /etc/inittab default runlevel

может он у тебя не доходит до 2-го уровня.

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 3)
Ответ на: комментарий от IvanR

а они ссылки на /etc/init.d/testinit

Да, симлинки.

программа должна быть, update-rc.d или аналог для centos

Эта программа как раз и есть chkconfig.

может он у тебя не доходит до 2-го уровня.

Как раз стартует-то всё нормально. Вот при shutdown и reboot скрипты почему-то не отрабатывают.

generator ★★★
() автор топика
Ответ на: комментарий от generator

ну фиг знает, попробуй добавь на второй уровень KXXtestinit или на 1 - 0 уровнях измени приорите с 01, на какой-нибудь посередине, попробуй еще в уровень S добавить ссылку.

в общем что-то странное действительно.

а в программе chkconfig точно ничего не напутал, я с ней не работал, по ней ничего подсказать не смогу.

IvanR ★★★
()

grep initdefault /etc/inittab

anonymous
()

добавь /etc/rc.d/rc3.d/K01testinit

bigbit ★★★★★
()

Всем спасибо, разобрался я, в чём дело. Никогда не знал об этом (

Вот правильная версия скрипта:

[root@db ~]# cat /etc/init.d/testinit 
#!/bin/bash
# chkconfig: 234 99 1

case $1 in
start)
echo "`date` Starting..." >> /root/testinit
touch /var/lock/subsys/testinit
;; 
stop)   
echo "`date` Stopping..." >> /root/testinit
rm -rf /var/lock/subsys/testinit
;; 
esac    
exit 0
Дело было в lock-файле. Без него скрипты на остановку не запускаются. Век живи - век учись, как говорится..

generator ★★★
() автор топика
21 декабря 2013 г.
Ответ на: комментарий от generator

Зачем нужны init-скриптам файлы блокировок?

Добавлю ссылки на статью в RedHat Magazine по этому поводу. И перевод.

Файлы блокировок используются rc-скриптами при переходах между уровнями выполнения для корректного останова сервисов. При перезапуске, например, имеем следующую последовательность:

service ... stop
kill -15 ..
kill -9 ...

Wowik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.