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