init скрипты в стиле SysV

init скрипты в стиле SysV являются исторически первым способом управления службами и автоматического их запуска после перезагрузки. Сейчас используется в основном systemd и upstart, но обратная совместимость в большинстве случаев сохраняется.

 

init скрипты в стиле SysV — написание скрипта для своего сервиса

Рассмотрим написание скрипта для своей службы, которая будет управляться системой в автоматичесом режиме — прежде всего запускаться после перезагрузки. Администратор сможет отдавать команды start | stop | restart | status

 

Скрипт будет называться monitor и будет проверять запущен ли веб-сервер на порту 80

Создадим скрипт

touch /etc/init.d/monitor

 

Потребуется присвоить ему бит исполнения

chmod +x /etc/init.d/monitor

 

Теперь переходим к написанию самого init скрипта на bash

mcedit /etc/init.d/monitor

#!/bin/bash
#chkconfig: 2345 20 80
#description: monitor apache web server
#Source function library.

case «$1» in
start)
echo «start `date`» >> /var/log/monitor.log
/opt/monitor.sh &
echo $!>/var/run/monitor.pid
;;
stop)
echo «stop + `date`» >> monitor.log
kill $(cat /var/run/monitor.pid)
rm /var/run/monitor.pid
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e /var/run/monitor.pid]; then
echo apache monitor is running, pid=$(cat /var/run/monitor.pid)
else
echo apache monitor is NOT running
exit 1
fi
;;
*)
echo «Usage: $0 {start|stop|restart|status}»
esac
exit 0

 

 

Сам скрипт в простейшем случае может выглядеть так

mcedit /opt/monitor.sh

res=`netstat -nltp | grep 80` && echo $res && if [[ $res != «» ]] ; then mail -s ALERT info@exmple.com</dev/null; fi

 

Он проверяет службу на порту 80 и при ее отсутствии отправляет сообщение администратору.

 

Также нужен бит исполнения

chmod +x /opt/monitor.sh

 

Стартуем написанный сервис

/etc/init.d/monitor start

 

Проверяем статус

/etc/init.d/monitor status

apache monitor is running, pid=5918

 

Затем останавливаем выполнение

/etc/init.d/monitor stop

 

Процесс был успешно завершен

/etc/init.d/monitor status

apache monitor is NOT running

 

 

Проверим записи в логе, чтобы убедиться в том, что скрипт работает так как нужно

cat /var/log/monitor.log

start Пт июн 15 16:40:41 +05 2018

stop + Пт июн 15 16:43:21 +05 2018

 

Читайте про exit code в Bash скриптах

Запись опубликована автором в рубрике Bash.