Инструменты пользователя

Инструменты сайта


os:linux:systemd

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
os:linux:systemd [23.03.2025 08:36] – [Таймер для периодического запуска] viacheslavos:linux:systemd [12.10.2025 13:26] (текущий) – [journalctl] viacheslav
Строка 1: Строка 1:
 ====== systemd ====== ====== systemd ======
-https://www.freedesktop.org/software/systemd/man/index.html\\+https://www.freedesktop.org/software/systemd/man/latest/index.html\\ 
 +[[https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html|systemd.service — Service unit configuration]]\\ 
 +[[https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html|systemd.unit — Unit configuration]]\\ 
 +[[https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html|systemd.exec — Execution environment configuration]]\\
 [[https://www.redhat.com/sysadmin/systemd-automate-recovery|Set up self-healing services with systemd]]\\ [[https://www.redhat.com/sysadmin/systemd-automate-recovery|Set up self-healing services with systemd]]\\
 [[https://www.youtube.com/watch?v=tY9GYsoxeLg|Demystifying Systemd]]\\ [[https://www.youtube.com/watch?v=tY9GYsoxeLg|Demystifying Systemd]]\\
Строка 74: Строка 77:
 </code> </code>
  
 +==== Создать юнит ====
 +<code bash>
 +# Создание пользовательского сервиса и таймера (каталог ~/.config/systemd/user)
 +systemctl edit myservice --user --full --force
 +systemctl edit myservice.timer --user --full --force
 +
 +# Создание системного сервиса и таймера (каталог /etc/systemd/system), нужен рут
 +sudo systemctl edit myservice --full --force
 +sudo systemctl edit myservice.timer --full --force
 +</code>
 +После ''systemctl edit'' делать ''systemctl daemon-reload'' не нужно, в отличие от создания юнита как текстового файла в редакторе.
 ==== Зависимость между юнитами и порядок запуска ==== ==== Зависимость между юнитами и порядок запуска ====
 Перед запуском юнит может ''wants'' или ''requires'' другой юнит. Разница: Перед запуском юнит может ''wants'' или ''requires'' другой юнит. Разница:
Строка 295: Строка 309:
 [[https://www.youtube.com/watch?v=8640OcCL8T8|Linux Command Line (57) systemd.timer pt1 - MichaelsTechTutorials]]\\ [[https://www.youtube.com/watch?v=8640OcCL8T8|Linux Command Line (57) systemd.timer pt1 - MichaelsTechTutorials]]\\
 [[https://www.youtube.com/watch?v=OV3Gc0SISUo|Linux Command Line (58) systemd.timer pt2 - MichaelsTechTutorials]]\\ [[https://www.youtube.com/watch?v=OV3Gc0SISUo|Linux Command Line (58) systemd.timer pt2 - MichaelsTechTutorials]]\\
-[[https://habr.com/ru/post/535930/|Systemd для продолжающих. Part 1 — Запуск юнитов по временным событиям]]+[[https://habr.com/ru/post/535930/|Systemd для продолжающих. Part 1 — Запуск юнитов по временным событиям]]\\ 
 +[[https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html|systemd.time — Time and date specifications]] 
 + 
 +==== Минимальный вариант ==== 
 +<code bash> 
 +mkdir -p ~/.config/systemd/user 
 +cd ~/.config/systemd/user 
 +loginctl enable-linger $USER 
 + 
 +### cleanup.service 
 +[Service] 
 +ExecStart=/home/admin/scripts/cleanup.sh 
 + 
 +### cleanup.timer 
 +# Секция [Install] нужна для автозагрузки таймера 
 +[Timer] 
 +OnCalendar=*-*-* 2:00:00 
 + 
 +[Install] 
 +WantedBy=timers.target 
 + 
 +# Шебанг в скрипте обязателен, иначе сервис не поймёт, что именно он запускает 
 +### /home/admin/scripts/cleanup.sh 
 +#!/bin/bash 
 + 
 +find /opt/maven_repo/jjj -name 'business-application-*-1-DBI-*' -type f -mtime +5 -delete 
 +find /opt/maven_repo/jjj -name 'business-model-*-1-DBI-*' -type f -mtime +10 -delete 
 +find /opt/maven_repo/jjj/metamodel-* -name 'metamodel-*-1-DBI-*' -type f -mtime +5 -delete 
 + 
 +### Запуск, автозагрузка 
 +systemctl --user daemon-reload 
 +systemctl --user start cleanup.timer 
 +systemctl --user enable cleanup.timer 
 +</code> 
 + 
 +==== Срабатывание чаще минуты ==== 
 + 
 +Например, раз в 10 сек 
 +<code bash> 
 +[Timer] 
 +# Каждые 3 минуты 
 +# OnCalendar=*:0/
 +# Каждые 10 сек 
 +OnCalendar=*:*:0/10 
 +# Обязательный параметр для таймеров меньше минуты 
 +AccuracySec=1s 
 + 
 +[Install] 
 +WantedBy=timers.target 
 +</code> 
 + 
 +===== journalctl ===== 
 +<code bash> 
 +unit_name="activemq" 
 +# Вывести лог последнего запуска (MainPID показывается только если сервис работает), здесь - сервис запущен под пользователем 
 +journalctl --user _PID=$(systemctl show --user --property ExecMainPID --value $unit_name) 
 +# Вычисление исходя из времени запуска (для коллекции. Лучше использовать PID) 
 +journalctl --user -u $unit_name --since "$(date -d "$(systemctl show --user --property=ActiveEnterTimestamp $unit_name |cut -d= -f2)" +'%F %T')" 
 +</code> 
 +===== Литература ===== 
 +[[https://superuser.com/questions/1390419/starting-tomcat-8-5-using-systemd-on-centos-7|Starting Tomcat 8.5 using systemd on Centos 7]]\\ 
 +[[https://jdebp.uk/FGA/systemd-house-of-horror/tomcat.html|The systemd house of horror: Wrapping Apache Tomcat in many pointless extra layers]] m( 
os/linux/systemd.1742718969.txt.gz · Последнее изменение: viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki