Как написать «rc скрипт», чтобы остановить службу, до того, как сеть отключится в CentOS / RHEL

by itisgood

Задача

Необходимо чистое завершение работы службы, но до того, как сеть отключится, используя скрипт rc в системе CentOS / RHEL.

Ответ

Решение состоит в том, чтобы добавить скрипт «SystemV rc», который только создает файл блокировки при запуске и останавливает приложение при остановке.

1. Для этого создайте файл /etc/rc.d/init.d/appshutdown со следующим содержимым:

#!/bin/sh
#
# appshutdown after network shutdown
#
# chkconfig: 2345 00 00
# description:  This is a script to stop jboss
#
# processname: /app/onboot/stopServices.sh
# pidfile: 
#
### BEGIN INIT INFO
# Provides: 
# Required-Start:  
# Required-Stop:  $local_fs $syslog $network $named 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 6
# Short-Description: stop jboss
# Description: stopServices.sh stop jboss
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

LOGGER="/usr/bin/logger -p info -t stopService"
# private settings
LOCKFILE="/var/lock/subsys/appshutdown"

usage ()
{
        echo $"Usage: $0 {stop|start|status}" 1>&2
}

start()
{
        $LOGGER "Fake start to create $LOCKFILE"
        touch $LOCKFILE
}

status()
{
        RETVAL=0
}

stop ()
{
        #$LOGGER "`date` Stop jboss with /app/onboot/stopServices.sh"
        su - jboss -c "/app/onboot/stopServices.sh"
        rm -f $LOCKFILE
        # $LOGGER "`date` Stop jboss done"
}

case "$1" in
    start) start ;;
    status) status ;;
    stop) stop ;;
    *) usage ;;
esac

exit $RETVAL

2. Затем измените исполняемый бит файла:

# chmod +x /etc/rc.d/init.d/appshutdown

3. Теперь включите сервис для автоматического запуска при перезагрузке:

# chkconfig --add appshutdown

У вас должна быть ссылка в /etc/rc.d/rc3.d.

Важные моменты для запоминания

– вам нужно выполнить touch файла с именем службы в каталоге /var/lock/subsys.

Например, /var/lock/subsys/appshutdown, поэтому init знает, что он должен остановить эту службу. Без этого скрипт не будет работать!

# touch /var/lock/subsys/appshutdown
  • адаптируйте скрипт по вашим потребностям – важно имя скрипта и файла.
  • вы должны определить, на каких уровнях вы хотите запустить и остановить службу:
# Default-Start: 2 3 4 5 
# Default-Stop: 0 6

– даже если вы хотите остановить что-то с помощью этого скрипта, вам нужно написать функцию запуска, которая касается файла блокировки.

 

You may also like

Leave a Comment