Как настроить systemd watcher для выполнения после завершения загрузки / перемещения определенного файла? - PullRequest
0 голосов
/ 26 сентября 2018

Итак, у меня есть следующий java-сервер: Simple Spring Boot jar - 50MB

Файл находится в /home/dashboard/dashboard-server/dashboard.jar

У меня есть следующие файлы systemd пользователя в /home/dashboard/.config/systemd/user.Когда jar-файл изменяется (т.е. touch -m dashboard.jar), мой сервер приложений перезагружается, и это хорошо.

Вот проблема ... Когда я передаю новую версию jar на сервер, например, с scp, мой наблюдатель срабатывает, как только пишутся первые байты.Имейте в виду, что файл JAR 50 МБ и скорость загрузки составляет 3 МБ / с.Таким образом, загрузка файла jar на сервер может занять некоторое время, но мой наблюдатель systemd уже перезапустил службу, которая завершится сбоем, поскольку полный файл jar еще не загружен.

Я знаю, что ямогу добавить ExecStartPre=/bin/sleep {seconds_here} в мой сервисный тег, но это не то "исправление", которое я ищу, так как скорость передачи может варьироваться. Возможно ли, чтобы systemd уловил «загрузка / копирование / перемещение файла завершена» и затем вызвал наблюдателя?

Или есть другое решение?

Вот мои 3 файла (служба, путь наблюдателя, служба наблюдателя)

# /home/dashboard/.config/systemd/user/dashboard-server.service
[Unit]
Description=Dashboard Server
After=syslog.target network.target

[Service]
WorkingDirectory=/home/dashboard/dashboard-server
ExecStart=/usr/bin/java -jar dashboard.jar --spring.config.location=file:conf/
StandardOutput=null
StandardError=null
SyslogIdentifier=dashboard-server
SuccessExitStatus=143
Restart=always
PrivateTmp=true
NoNewPrivileges=true

[Install]
WantedBy=default.target

# /home/dashboard/.config/systemd/user/dashboard-server-watcher.path
[Path]
PathModified=/home/dashboard/dashboard-server/dashboard.jar

[Install]
WantedBy=default.target

# /home/dashboard/.config/systemd/user/dashboard-server-watcher.service
[Unit]
Description=Dashboard Server Restarter
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl --user restart dashboard-server.service

[Install]
WantedBy=default.target
...