Команда Linux systemctl
управляет конфигурациями системы и служб, позволяя администраторам управлять ОС и контролировать состояние служб.
Содержание
Синтаксис
systemctl [опции] [команда]
Команды управления службами
- status [PATTERN...|PID...]
- Показать статус выполнения одной или нескольких служб
- start UNIT...
- Запустить (активировать) одну или несколько служб
- stop UNIT...
- Остановить (деактивировать) одну или несколько служб
- restart UNIT...
- Запустить (перезапустить) одну или несколько служб
- reload UNIT...
- Перезагрузить одну или несколько служб
- enable [UNIT...|PATH...]
- Включить одну или несколько служб
- disable UNIT...
- Отключить одну или несколько служб
- list-units [PATTERN...]
- Список служб, находящихся в настоящее время в памяти
- list-automounts [PATTERN...]
- Список служб автомонтирования, находящихся в настоящее время в памяти и спящем режиме
Команд и опций очень много и с их полным списком можно ознакомиться в Справке:
$ systemctl --help
Использование команды systemctl в Linux
Как работает systemctl
Команда systemctl
необходима для управления менеджером systemd
, который в свою очередь управляет службами в Linux. При загрузке системы он запускает другие демоны параллельно, что ускоряет загрузку системы.
Каждый сервис запускается с собственным идентификатором, что даёт возможность отслеживания статусов всех запущенных процессов.
Запуск служб
Допустим, ваш сервер работает под управлением: nginx
, php-fpm
, mysql
.
Для запуска служб утилита systemctl
используется с командой start
. Запустим mysql
, php-fpm
, nginx
:
oleg@mobile:~:$ sudo systemctl start mysql.service php-fpm.service nginx.service
oleg@mobile:~:$
Проверка статуса
Для проверки статус службы в системе используется команда status
. Сейчас проверим работу запущенных сервисов:
oleg@mobile:~:$ sudo systemctl status mysql.service
● mariadb.service - MariaDB 10.11.2 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
Active: active (running) since Wed 2023-05-03 10:43:45 EEST; 2min 48s ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Process: 117296 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 117302 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recover>
Process: 117381 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Main PID: 117330 (mariadbd)
Status: "Taking your SQL requests now..."
Tasks: 8 (limit: 2157)
Memory: 140.9M
CPU: 630ms
CGroup: /system.slice/mariadb.service
└─117330 /usr/bin/mariadbd
мая 03 10:43:42 mobile mariadbd[117330]: 2023-05-03 10:43:42 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically wri>
мая 03 10:43:42 mobile mariadbd[117330]: 2023-05-03 10:43:42 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
мая 03 10:43:42 mobile mariadbd[117330]: 2023-05-03 10:43:42 0 [Note] InnoDB: log sequence number 4105922644; transaction id 1078080
мая 03 10:43:42 mobile mariadbd[117330]: 2023-05-03 10:43:42 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
мая 03 10:43:43 mobile mariadbd[117330]: 2023-05-03 10:43:43 0 [Note] Server socket created on IP: '0.0.0.0'.
мая 03 10:43:43 mobile mariadbd[117330]: 2023-05-03 10:43:43 0 [Note] Server socket created on IP: '::'.
мая 03 10:43:45 mobile mariadbd[117330]: 2023-05-03 10:43:45 0 [Note] /usr/bin/mariadbd: ready for connections.
мая 03 10:43:45 mobile mariadbd[117330]: Version: '10.11.2-MariaDB' socket: '/run/mysqld/mysqld.sock' port: 3306 Arch Linux
мая 03 10:43:45 mobile systemd[1]: Started MariaDB 10.11.2 database server.
мая 03 10:43:47 mobile mariadbd[117330]: 2023-05-03 10:43:47 0 [Note] InnoDB: Buffer pool(s) load completed at 230503 10:43:47
lines 1-26/26 (END)
oleg@mobile:~:$ sudo systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Wed 2023-05-03 10:43:39 EEST; 4min 30s ago
Process: 117298 ExecStart=/usr/bin/nginx -g pid /run/nginx.pid; error_log stderr; (code=exited, status=0/SUCCESS)
Main PID: 117299 (nginx)
Tasks: 3 (limit: 2157)
Memory: 3.7M
CPU: 52ms
CGroup: /system.slice/nginx.service
├─117299 "nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;"
├─117300 "nginx: worker process"
└─117301 "nginx: worker process"
мая 03 10:43:39 mobile systemd[1]: Starting A high performance web server and a reverse proxy server...
мая 03 10:43:39 mobile systemd[1]: Started A high performance web server and a reverse proxy server.
oleg@mobile:~:$
oleg@mobile:~:$ sudo systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
Active: active (running) since Wed 2023-05-03 10:43:39 EEST; 4min 58s ago
Main PID: 117297 (php-fpm)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 2157)
Memory: 12.0M
CPU: 130ms
CGroup: /system.slice/php-fpm.service
├─117297 "php-fpm: master process (/etc/php/php-fpm.conf)"
├─117308 "php-fpm: pool www"
└─117309 "php-fpm: pool www"
мая 03 10:43:39 mobile systemd[1]: Starting The PHP FastCGI Process Manager...
мая 03 10:43:39 mobile php-fpm[117297]: [NOTICE] fpm is running, pid 117297
мая 03 10:43:39 mobile php-fpm[117297]: [NOTICE] ready to handle connections
мая 03 10:43:39 mobile systemd[1]: Started The PHP FastCGI Process Manager.
мая 03 10:43:39 mobile php-fpm[117297]: [NOTICE] systemd monitor interval set to 10000ms
oleg@mobile:~:$
Полученного отчёта вполне достаточно для проверки корректности работы служб и устранения возможных проблем.
Перезапуск
Перезапуск службы используется при внесении каких-либо изменений в конфигурацию сервера. Для перезапуска используется команда restart
:
oleg@mobile:~:$ sudo systemctl restart mysql.service
oleg@mobile:~:$
Перезагрузка
Если приложения поддерживают перезагрузку конфигурационных файлов без необходимости в выполнении перезагрузки всей службы, то можно использовать команду reload
:
oleg@mobile:~:$ sudo systemctl reload nginx.service
oleg@mobile:~:$
А здесь, например, команда reload
не работает:
oleg@mobile:~:$ sudo systemctl reload mysql.service
Failed to reload mysql.service: Job type reload is not applicable for unit mariadb.service.
oleg@mobile:~:$
Включение в автозагрузку
Для включения сервиса в автозагрузку используется команда enable
. При этом systemd
создаст символьную ссылку:
oleg@mobile:~:$ sudo systemctl enable mysql.service
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
oleg@mobile:~:$
Отключение из автозагрузки
Для отключения службы из автозапуска используется команда disable
. Символьная ссылка при этом будет удалена:
oleg@mobile:~:$ sudo systemctl disable mysql.service
Removed "/etc/systemd/system/multi-user.target.wants/mariadb.service".
oleg@mobile:~:$
Остановка
Для остановки одной или нескольких служб используется команда stop
. В качестве примера остановим запущенный сервер:
oleg@mobile:~:$ sudo systemctl stop mysql.service nginx.service php-fpm.service
oleg@mobile:~:$
Заключение
В статье были приведены основные принципы работы в Linux с командой systemctl
. Любой начинающий администратор своего сервера прочитав её, сможет включать, выключать, перезапускать службы, добавлять их в автозагрузку.