centos does not stop the init script, if not using a marker

Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
Nico Schottelius 2012-10-04 15:17:15 +02:00
parent 2b0d98f4c8
commit 1f4ae50f48

View file

@ -0,0 +1,54 @@
[[!meta title="Why CentOS does not stop your init script"]]
## Introduction
If you created a simple init script below **/etc/init.d**, which
gets started, but not stopped on reboot or system halt, this
article is for you.
## Background
I assume you ensured that the **chkconfig** information in the
script is correct and that you ran chkconfig $name on. The output
of chkconfig should look like this:
[root@kvm-hw-snr01 ~]# chkconfig --list | grep kvm-vms
kvm-vms 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@kvm-hw-snr01 ~]#
Although this looks correct, there is a small block in **/etc/rc.d/rc**
that prevents your init script from being called on stop:
# First, run the KILL scripts.
for i in /etc/rc$runlevel.d/K* ; do
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/K??}
[ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] || continue
check_runlevel "$i" || continue
# Bring the subsystem down.
[ -n "$UPSTART" ] && initctl emit --quiet stopping JOB=$subsys
$i stop
[ -n "$UPSTART" ] && initctl emit --quiet stopped JOB=$subsys
done
So only if your script creates
/var/lock/subsys/**yourscriptname** or /var/lock/subsys/**yourscriptname**.init,
it will be called on stop.
## Solution
You can include the following three lines into your script to get
your script stopped:
broken_lock_file_for_centos=/var/lock/subsys/kvm-vms
# In the start block
touch "$broken_lock_file_for_centos"
# In the stop block
rm -f "$broken_lock_file_for_centos"
[[!tag localch net unix]]