Linux: systemctl – управление службами

Автор: | 24/04/2016

linux_logoDebian, начиная с 8 версии по умолчанию используется systemd вместо init.d, который использует unit-файлы из каталога /etc/systemd/system, вместо скриптов в /etc/init.d/, как это делает init.d.

Краткое перечисление полезных команд systemctl.

Получение списка служб

Вывести на экран активные сервисы и их состояние:

# systemctl list-units -t service
UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
acpid.service                      loaded active running ACPI event daemon
atd.service                        loaded active running Deferred execution scheduler
console-setup.service              loaded active exited  LSB: Set console font and keymap
...
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.

32 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Что бы убрать “легенду” внизу списка – используйте --no-legend.

Что бы вывести все сервисы – используйте--all:

# systemctl list-units -t service --all
...
63 loaded units listed.
...

Управление службами

Проверить состояние отдельного сервиса:

# systemctl status mysql
● mysql.service - LSB: Start and stop the mysql database server daemon
   Loaded: loaded (/etc/init.d/mysql)
   Active: active (running) since Sun 2016-04-24 10:30:32 GMT; 16min ago
   CGroup: /system.slice/mysql.service
           ├─3076 /bin/bash /usr/bin/mysqld_safe
           ├─3077 logger -p daemon.err -t /etc/init.d/mysql -i
           ├─3215 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-error --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
           └─3216 logger -t mysqld -p daemon.error

Apr 24 10:30:36 debian-jessie /etc/mysql/debian-start[3267]: mysql.time_zone_transition                         OK
Apr 24 10:30:36 debian-jessie /etc/mysql/debian-start[3267]: mysql.time_zone_transition_type                    OK
Apr 24 10:30:36 debian-jessie /etc/mysql/debian-start[3267]: mysql.user                                         OK
...

Запустить сервис:

# systemctl start mysql

Остановить:

# systemctl stop mysql

Перезагрузить конфигурацию сервиса:

# systemctl reload mysql

Перезапустить службу:

# systemctl restart mysql

Перезапустить, если она запущена:

# systemctl try-restart mysql

Выполнить reload (конфигурации), если такая команда поддеживается – или перезапустить службу. Если служба остановлена – она будет запущена:

# systemctl reload-or-restart mysql

Убить службу:

# systemctl kill mysql

Больше по kill см. тут>>>.

Проверить запущен и работает ли сервис:

# systemctl is-active mysql
active

Или с помощью кода выполнения:

# systemctl is-active mysql; echo $?
active
0
# systemctl is-active mysql --quiet; echo $?
0

Аналогично можно проверить были ли проблемы при запуске сервиса и запущен ли он в данный момент:

# systemctl is-failed mysql
active
# systemctl is-failed mysql --quiet; echo $?
1

Если сервис был корретно остановлен:

# systemctl is-failed mysql
inactive

Управление автозапуском

Добавить в автозапуск:

# systemctl enable mysql

Убрать из автозапуска:

# systemctl disable mysql

Проверить – есть ли юнит в автозапуске:

# systemctl is-enabled sshd
enabled

Аналогично примеру с is-active – можно использовать is-enabled:

# systemctl is-enabled sshd
enabled
# systemctl is-enabled sshd --quiet; echo $?
0

Ссылки по теме

SysVinit to Systemd Cheatsheet

Getting Started with systemd

How To Use Systemctl to Manage Systemd Services and Units