- Основные команды управления systemd:
Добавить в автозагрузку:
Удалить из автозагрузки:
Проверить есть ли в автозагрузке сервис:
Какие сервисы добавлены в автозагрузку:
systemctl list-unit-files | grep enabled
- Тонкая настройка systemctl:
Для начала нужно убедиться, что ваш дистрибутив работает с Systemd, командой:
если вывод будет /sbin/init - то у вас используется SysV.
Если вывод такой:
/lib/systemd/systemd - то все в порядке, у вас Systemd.
Systemd осуществляет свою работу с помощью так называемых юнитов systemd.
Юнит (Unit) - это конфигурационный файл, расположенный в одной из директорий:
/run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
/etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме. В этом каталоге мы и будем создавать свой юнит.
- Мой рабочий пример для iptables
[Unit]
Description=My Script Iptables
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c /root/scripts/iptables.sh
[Install]
WantedBy=multi-user.target
chmod 644 /lib/systemd/system/iptables.service
systemctl daemon-reload
systemctl enble iptables.service
reboot
- Первый пример
Переходим в каталог /etc/systemd/system/ и создаем в нем, либо копируем какой-либо существующий файл, к примеру sshd.service, и в нем пишем:
[Unit]
Description=MyBashScript
After=syslog.target
[Service]
ExecStart=/bin/bash '/home/user/scripts/script.sh'
Type=forking
[Install]
WantedBy=multi-user.target
Alias=bash.service
Секция [Unit]:
Содержит общую информацию о сервисе, его описание, и то, что он должен стартовать после запущенного демона Syslog.
Секция [Service]:
Непосредственная информация о нашем сервисе.
Параметр ExecStart указывает на исполняемый файл нашего сервиса. Нужно указывать абсолютные пути, в случае с bash-скриптом путь до скрипта берем в одинарные кавычки.
Type=forking означает, что запускаемый скрипт будет работать в режиме демона. Если мы хотим, чтобы скрипт выполнился один раз, то указываем Type=simple.
Секция [Install]:
Последняя секция [Install] содержит информацию о цели, в которой сервис должен стартовать. В данном случае мы хотим, что сервис должен быть запущен, когда будет активирована цель multi–user.target (это аналог init 3 в SysV).
Alias=bash.service - для удобства создадим алиас, чтобы проще управлять нашим сервисом через systemctl.
Сохраняем файл, и выполняем команду
Запускаем наш новый сервис:
- Второй пример:
[Unit]
Description=MyUnit
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/run/service.pid
WorkingDirectory=/usr/local/service
User=munit
Group=unit
OOMScoreAdjust=-100
ExecStart=/usr/sbin/service
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutSec=300
[Install]
WantedBy=multi-user.target
В простом варианте юнит состоит из трех секции:
[Unit], [Service], [Install].
Секция [Unit]
Описание юнита:
Description=MyUnit
Далее указываем порядок загрузки, после какого сервиса systemd запустить наш юнит:
After=syslog.target
After=network.target
Секция [Service]
Задаем тип сервиса:
Type=simple
Используется по умолчанию. Служба будет запущена незамедлительно. Процесс при этом не должен разветвляться. Не Используйте этот тип, если другие службы зависят от очередности при запуске данной службы.
Type=forking
Указывают если служба запускается однократно и процесс разветвляется с завершением родительского процесса.
Расположение pid-файла:
PIDFile=/run/service.pid
Рабочий каталог приложения:
WorkingDirectory=/usr/local/service
Пользователь и группа, под которым будет запускаться сервис:
User=unit
Group=unit
Задаем приоритет убийства процесса при нехватке памяти:
OOMScoreAdjust=-100
Минимальное значение -1000 — полный запрет.
Команды запуска, остановки и перезапуска сервиса:
ExecStart=/usr/sbin/service
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Таймаут запуска или остановки сервиса:
TimeoutSec=300
Контроль запуска сервиса и автоматический запуск в случае крєша:
Restart=always
Секция [Install]
Уровень запуска сервиса:
WantedBy=multi-user.target
- Ну и еще один постенький пимер мой
https://onedayadmin.sytes.net/noip-domennoe-imya-na-dinamicheskom-ip/
Ниже представлены основные команды 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
Источники:
http://freecoder.ru/content/zapusk-bash-skripta-v-fonovom-rezhime-cherez-systemd