====== Автозагрузка сервисов в Linux ======
===== CentOS =====
==== CentOS 7 ====
Вывести список всех сервисов
# systemctl list-unit-files --type=service
Проверить статус httpd
# systemctl status httpd
Добавить сервис в автозагрузку (аналог chkconfig on)
# systemctl enable httpd
Убрать сервис из автозагрузки
# systemctl disable httpd
Проверить добавлен ли httpd в автозагрузку
# systemctl is-enabled httpd
Проверить какие сервисы не смогли запуститься при старте системы
# systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
ip6tables.service loaded failed failed IPv6 firewall with ip6tables
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
Более подробный список доступных команд
Ниже представлены основные команды systemctl:
^ Команда ^ Описание ^
| systemctl start name.service | запуск сервиса |
| systemctl stop name.service | остановка сервиса |
| systemctl restart name.service | перезапуск сервиса |
| systemctl try-restart name.service | перезапуск сервиса только, если он запущен |
| systemctl reload name.service | перезагрузка конфигурации сервиса |
| systemctl status name.service | проверка, запущен ли сервис с детальным выводом состояния сервиса |
| systemctl is-active name.service | проверка, запущен ли сервис с простым ответом: active или inactive |
| systemctl list-units --type service --all | отображение статуса всех сервисов |
| systemctl enable name.service | активирует сервис (позволяет стартовать во время запуска системы) |
| systemctl disable name.service | деактивирует сервис |
| systemctl reenable name.service | деактивирует сервис и сразу активирует его |
| systemctl is–enabled name.service | проверяет, активирован ли сервис |
| systemctl list-unit-files --type service | отображает все сервисы и проверяет, какие из них активированы |
| systemctl mask name.service | заменяет файл сервиса симлинком на /dev/null, делая юнит недоступным для systemd |
| systemctl unmask name.service | возвращает файл сервиса, делая юнит доступным для systemd |
==== CentOS 6 ====
=== chkconfig ===
Вывести список всех сервисов
# chkconfig --list
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
htcacheclean 0:off 1:off 2:off 3:off 4:off 5:off 6:off
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ipset 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
munin-node 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
portreserve 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
svnserve 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
vnstat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xinetd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Показать информацию по сервису httpd
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Добавить сервис в автозагрузку
# chkconfig httpd on
или
# chkconfig --level 345 httpd on
Чтобы отключить
# chkconfig httpd off
=== ntsysv ===
Также можно воспользоваться утилитой ''[[https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-services-ntsysv.html|ntsysv]]''
# yum install ntsysv
# ntsysv --level 345
{{:linux:ntsysv.png|}}
===== Debian/Ubuntu =====
==== update-rc.d ====
Вывести список сервисов и их состояние
# service --status-all
[ + ] acpid
[ - ] anacron
[ + ] atd
[ + ] avahi-daemon
[ - ] bootlogs
[ ? ] bootmisc.sh
[ ? ] checkfs.sh
[ ? ] checkroot-bootclean.sh
[ - ] checkroot.sh
[ - ] console-setup
[ + ] cron
[ + ] dbus
[ + ] exim4
[ ? ] hdparm
[ - ] hostname.sh
[ ? ] hwclock.sh
[ - ] kbd
[ - ] keyboard-setup
[ - ] keymap.sh
[ ? ] killprocs
[ ? ] kmod
[ - ] motd
[ ? ] mountall-bootclean.sh
[ ? ] mountall.sh
[ ? ] mountdevsubfs.sh
[ ? ] mountkernfs.sh
[ ? ] mountnfs-bootclean.sh
[ ? ] mountnfs.sh
[ ? ] mtab.sh
[ ? ] mysql
[ ? ] networking
[ + ] nginx
[ + ] php5-fpm
[ - ] procps
[ ? ] rc.local
[ - ] rmnologin
[ - ] rsync
[ + ] rsyslog
[ ? ] sendsigs
[ + ] ssh
[ - ] sudo
[ + ] udev
[ ? ] udev-mtab
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ - ] urandom
[ + ] - сервис работает в настоящее время\\
[ - ] - сервис в настоящее время не работает\\
[ ? ] - вывод статуса для сервиса не предусмотрен
Перевод [[http://manpages.ubuntu.com/manpages/trusty/man8/update-rc.d.8.html|man]] доступен [[http://manpages.ylsoftware.com/ru/update-rc.d.8.html|здесь]]
Добавить apache2 в автозагрузку
# update-rc.d apache2 defaults
update-rc.d: using dependency based boot sequencing
Удалить apache2 из автозагрузки
# update-rc.d -f apache2 remove
update-rc.d: using dependency based boot sequencing
Чуть подробнее.
В Linux у нас определенное количество уровней выполнения ([[https://ru.wikipedia.org/wiki/Уровень_выполнения|runlevel]])
К примеру MySQL и Apache у нас загружаются на 3 уровне.
И скорее всего вы хотите, чтобы MySQL стартовал перед Apache, а при перезагрузке сначала должен быть остановлен Apache, а потом MySQL.
Для этого нам нужно установить start (S) и kill (K) приоритеты.
Для MySQL нужно поставить приоритет на стадии загрузки, а для Apache приоритет на shutdown\reboot'е.
При старте (S), чем меньше значение приоритета, тем раньше сервис будет запущен.
Сервис со start приоритетом равным 10 будет запущен раньше сервиса с приоритетом равным 20.
При остановке (K) всё наоборот. Сервис с большим приоритетом будет остановлен раньше, чем сервис с меньшим приоритетом.
Небольшой пример.
Устанавливаем приоритет start и kill сервису Apache
Синтаксис следующий
update-rc.d apache2 defaults [START] [KILL]
Итак, сделаем так, чтобы сначала стартовал MySQL, а потом Apache. А при рестарте сначала останавливался Apache, а потом MySQL.
# update-rc.d apache2 defaults 90 90
# update-rc.d mysql defaults 10 10
Так как start и kill приоритеты в данном случае одинаковые, то можно сократить команды следующим образом
# update-rc.d apache2 defaults 90
# update-rc.d mysql defaults 10
==== Утилита sysv-rc-conf ====
# apt-get install sysv-rc-conf
# sysv-rc-conf
{{:linux:sysv-rc-conf.png|}}
===== БОНУС - шпаргалка SysVinit/systemd =====
via https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet/ru
^ Команда sysvinit ^ Команда systemd ^ Комментарий ^
|service frobozz start |systemctl start frobozz.service |Используется для разового запуска службы. |
|service frobozz stop |systemctl stop frobozz.service |Используется для разовой остановки службы. |
|service frobozz restart |systemctl restart frobozz.service |Используется для разового перезапуска службы. |
|service frobozz reload |systemctl reload frobozz.service |Если такая возможность поддерживается службой, перезагружает конфигурационный файл, не прерывая процесса. |
|service frobozz condrestart |systemctl condrestart frobozz.service |Перезапускает службу, если она запущена. |
|service frobozz status |systemctl status frobozz.service |Сообщает, запущена ли служба. |
|ls /etc/rc.d/init.d/ |ls /lib/systemd/system/*.service /etc/systemd/system/*.service |Используется для получения списка служб, которые могут быть запущены или остановлены. |
|chkconfig frobozz on |systemctl enable frobozz.service |Включает запуск службы после перезагрузки. |
|chkconfig frobozz off |systemctl disable frobozz.service |Отключает запуск службы после перезагрузки. |
|chkconfig frobozz |systemctl is-enabled frobozz.service |Используется для проверки, будет ли служба запущена после перезагрузки. |
|chkconfig frobozz --list |ls /etc/systemd/system/*.wants/frobozz.service |Выдает список уровней загрузки(целей), при которых данная служба будет запущена автоматически. |
|chkconfig frobozz --add | |Не используется, нет аналога. |
Бонус к бонусу - [[https://github.com/ruzickap/linux.xvx.cz/tree/gh-pages/files/systemd_cheatsheet|шпаргалка в pdf, svg, dvi, tex]] | {{ :linux:systemd_cheatsheet.pdf |PDF версия, зеркало rtfm.wiki}}