如何设置systemd watcher在特定文件完成上传/移动后执行?

时间:2018-09-26 18:31:19

标签: linux systemd

所以我有以下Java服务器:Simple Spring Boot jar-50MB

文件位于/home/dashboard/dashboard-server/dashboard.jar

我在/home/dashboard/.config/systemd/user中有以下我的systemd用户文件。当jar文件被更改时(即touch -m dashboard.jar),我的应用服务器重新启动,这很好。

这是问题所在……例如,当我使用scp将jar的新版本传输到服务器时,写入第一个字节后立即触发我的观察者。请注意,jar文件为50MB,上传速度为3MB / s。因此,将jar 100%上传到服务器可能需要一点时间,但我的系统观察者已经重新启动了该服务,由于尚未上传完整的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

0 个答案:

没有答案