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


init скрипты в стиле SysV являются исторически первым способом управления службами и автоматического их запуска после перезагрузки.

В современных системах используется в основном systemd, но обратная совместимость в большинстве случаев сохраняется.



init скрипты размещаются на сервере в каталоге /etc/init.d и запускаются оттуда.


root@server:~# ls /etc/init.d/ | head

apache-htcacheclean
apache2
apparmor
apport
atd
console-setup.sh
cron
cryptdisks
cryptdisks-early
dbus



В каталоге находятся скрипты добавленные системой и скрипты, создаваемые в процессе установки сервисов. Также там можно размещать свои скрипты.



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 monitor is running, pid=$(cat /var/run/monitor.pid)
else
echo 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]

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



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

chmod +x /opt/monitor.sh



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

/etc/init.d/monitor start



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

/etc/init.d/monitor status

monitor is running, pid=5918



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

/etc/init.d/monitor stop



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

/etc/init.d/monitor status

 monitor is NOT running



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

tail -f /var/log/monitor.log

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

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



init скрипты


Читайте про exit code в Bash скриптах и про /etc/rc.local — файл, который можно использовать для запуска любого процесса после того как загрузилась операционная система


Проще настраивается запуск любых скриптов через systemd, пример можно посмотреть в материале про запуск приложения на nodejs production

Сказать спасибо