Итак, у меня есть следующий 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