ramas
02 октября 2024
Ранее это краткая заметка, сейчас неполноценный туториал. В ней вы узнаете, как настроить автоматическую перезагрузку systemd сервиса при изменении файла в директории.
Создадим основной systemd юнит, который требуется перезапускать при изменения файла в директории.
# sudo nano /etc/systemd/system/my_project.service
[Unit]
Description=My Test Projectt
[Service]
ExecStart=/usr/bin/python3 /home/user1/main.py
[Install]
WantedBy=multi-user.target
В данном примере сервис запускает простое Python приложение, которое выводит текущее время.
# sudo nano home/user1/main.py
from datetime import datetime
import logging
import time
logging.basicConfig(level=logging.INFO)
now = datetime.now()
while True:
logging.info(f'Время: {now.strftime("%d.%m.%Y %H:%M")}')
time.sleep(60)
Активируем и добавим сервис в автозагрузку.
sudo systemctl enable --now my_project
Посмотрим логи, и убедимся что все работает.
# sudo journalctl -u my_project
Sep 30 21:46:04 ramzis.ru systemd[1]: Started my_project.service - My Test Projectt.
Sep 30 21:46:04 ramzis.ru python3[1412]: INFO:root:Время: 30.09.2024 21:46
Создим вспомогательный сервис, задачей которого будет перезапустить основной my_project
юнит.
# sudo nano /etc/systemd/system/my_project_restart.service
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart my_project.service
Далее создадим .path
юнит, который будет отслеживать изменения файла /home/user1/restart.json
и запускать связанный с ним my_project_restart
сервис.
# sudo nano /etc/systemd/system/my_project_restart.path
[Path]
PathChanged=/home/user1/restart.json
[Install]
WantedBy=multi-user.target
Активируем и запустим.
sudo systemctl enable --now my_project_restart.path
Для того чтобы перезапустить сервис, достаточно что нибудь записать в файл /home/user1/restart.json
echo "0" > restart.json
Посмотрим логи основного сервиса и убедимся, что он перезапустился.
# sudo journalctl -u my_project
Sep 30 21:55:49 ramzis.ru systemd[1]: Stopped my_project.service - My Test Projectt.
Sep 30 21:55:49 ramzis.ru systemd[1]: Started my_project.service - My Test Projectt.
Sep 30 21:55:49 ramzis.ru python3[1580]: INFO:root:Время: 30.09.2024 21:55