55 lines
1.7 KiB
Text
55 lines
1.7 KiB
Text
|
[[!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]]
|