Вместе с подсистемой systemd появилась команда systemctl. Она позволяет управлять основными процессами Linux. Ниже представлена небольшая инструкция в виде шпаргалки наиболее используемых команд.
Описание команды systemctl
Примеры ее использования
Как с помощью systemd создать собственный сервис
Таймеры
Без параметров, systemctl показывает список запущенных служб, точек монтирования, устройств и других юнитов.
# systemctl
Примерный вывод команды:
1) название юнита;
2) тип юнита (например, service: служба или демон, mount: точка монтирования, device: устройства);
3) состояние юнита (загружен или нет);
4) обобщенный статус юнита (active: выполняется, inactive: не был запущен, maintenance: требуется внимание администратора);
5) текущий статус (запущен или нет);
6) описание.
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 list-units
Для удоства, можно фильтровать по типу:
systemctl list-units —type=service
systemctl list-units —type=timer
systemctl list-units —type=socket
8. Выполнить команду на удаленной системе:
systemctl —host root@192.168.0.15 stop cron
* остановит cron на компьютере с IP-адресом 192.168.0.15 , подключившись под учетной записью root .
9. Перезагрузить сервер:
systemctl reboot
* перезагрузит локальный сервер.
10. Проверка работы сервиса.
Выполняется с помощью опции 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 части:
Подробнее можно почитать о структуре и возможных опциях на странице 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
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…