Вместе с подсистемой systemd появилась команда systemctl. Она позволяет управлять основными процессами Linux. Ниже представлена небольшая инструкция в виде шпаргалки наиболее используемых команд.

Описание команды systemctl
Примеры ее использования
Как с помощью systemd создать собственный сервис
Таймеры

Общий синтаксис

Без параметров, systemctl показывает список запущенных служб, точек монтирования, устройств и других юнитов.

# systemctl

Примерный вывод команды:

1) название юнита;
2) тип юнита (например, service: служба или демон, mount: точка монтирования, device: устройства);
3) состояние юнита (загружен или нет);
4) обобщенный статус юнита (active: выполняется, inactive: не был запущен, maintenance: требуется внимание администратора);
5) текущий статус (запущен или нет);
6) описание.

Шпаргалка по часто используемым командам systemctl

1. Посмотреть статус службы:

systemctl status network

* покажет статус службы на примере сети network

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

systemctl start mysql

* запустит сервис баз данных на примере mysql

3. Остановить службу:

systemctl stop ntpd

* остановит сервис времени ntpd

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

systemctl restart nginx

* перезапустит веб-сервер nginx

5. Включить автозапуск службы:

systemctl enable apache

* разрешит автозапуск веб-сервера apache

6. Отключить автозапуск службы:

systemctl disable firewalld

* запретит автозапуск брандмауэра firewalld

7. Выполнить команду на удаленной системе:

systemctl --host [email protected] stop cron

* остановит cron на компьютере с IP-адресом 192.168.0.15, подключившись под учетной записью root.

8. Перезагрузить сервер:

systemctl reboot

* перезагрузит локальный сервер.

9. Проверка работы сервиса.

Выполняется с помощью опции is-active:

systemctl is-active docker

* в данном примере мы проверим работу службы docker.

а) Если сервис запущен, мы увидим:

active

б) Если не запущен:

failed

… или:

inactive

в) Если такого сервиса нет в системе:

unknown

… или:

inactive

Если сервис не работает или его нет в системе, команда вернет код ошибки, таким образом конструкция:

systemctl is-active docker && docker run hello-world

… приведет к выполнению команды docker run hello-world только в том случае, если сервис docker работает.

Создание сервиса

В подсистеме systemd также можно легко создать собственную службу и использовать ее для автозапуска приложений или собственных скриптов. Для этого в каталоге /usr/lib/systemd/system создаем юнит (файл) с расширением .service.

Пример простой и часто используемой конфигурации:

[Unit]
Description=Service Name
After=network.target

[Service]
User=root
Group=root
Type=simple

ExecStart=/usr/bin/myapp
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

* как правило, файл разделен на 3 части:

  • Unit — позволяет определить метаданные для юнита.
  • Service — раздел для основной конфигурации юнита.
  • Install — определение поведения для юнита при его включении или отключении.

Подробнее можно почитать о структуре и возможных опциях на странице https://linux-notes.org/pishem-systemd-unit-fajl/

Более сложный вариант разберем на примере сервиса bind:

vi /usr/lib/systemd/system/named.service

Содержимое может быть следующего содержания:

[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Wants=named-setup-rndc.service
Before=nss-lookup.target
After=network.target
After=named-setup-rndc.service

[Service]
Type=forking
Environment=NAMEDCONF=/etc/named.conf
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/run/named/named.pid
ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'
ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS
ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'
ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
PrivateTmp=true

[Install]
WantedBy=multi-user.target

После внесения изменений и сохранения файла, необходимо перечитать изменения командой:

systemctl daemon-reload

Теперь можно разрешить автозапуск:

systemctl enable named

Редактирование сервисов

Если мы хотим внести изменения в юнит-файл сервиса, который был установлен с последним, необходимо использовать drop-in файл или файл переопределения настроек. В противном случае, после обновления программы наши изменения могут быть удалены.

И так, мы для примера взяли юнит для bind. Чтобы создать для него drop-in файл, вводим:

systemctl edit named

И вносим, например, такие изменения:

[Service]
Restart=on-failure

* будет создан файл /etc/systemd/system/named.service.d/override.conf, который будет переопределять настройки основного юнит-файла. В данном примере, мы указываем на необходимость перезапуска сервиса при сбое.

Чтобы убедиться в использовании Drop-In файла смотрим статус сервиса:

systemctl status named

Мы должны увидеть что-то на подобие:

Drop-In: /etc/systemd/system/named.service.d
           — override.conf

Также мы можем редаетировать файл юните без drop-in. Для этого добавляем опцию full:

systemctl edit --full named

Однако, как было сказано выше, при очередном обновлении приложения, если разработчик пакета предоставляет файл systemd наши изменения могут быть перетерты.

Таймеры

Выше мы рассмотрели возможность автоматического запуска сервисов с помощью systemd. Мы также можем настроить периодический запуск данных юнитов по таймеру. Для этого нам нужно создать юнит с таким же названием, но на конце должен быть суффикс .timer.

Предположим, мы хотим создать запуск по таймеру named, для которого выше в примере создали юнит сервиса. Тогда создаем файл:

vi /usr/lib/systemd/system/named.timer
[Unit]
Description=Run named every 10 min

[Timer]
OnBootSec=5min
OnUnitActiveSec=10min

[Install]
WantedBy=timers.target

* в данном примере наш таймер будет создан для юнита named; он запустится через 5 минут после старта службы и будет запускать ее каждые 10 минут.

Перечитаем изменения в systemd:

systemctl daemon-reload

Разрешаем наш таймер:

systemctl enable named.timer

Запустим его:

systemctl start named.timer

Вывести список таймеров можно командой:

systemctl list-timers

Источник: https://www.dmosk.ru/

От ltvjybn14

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.