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 [email protected]</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 скриптах