Bir dizin değiştiğinde (içindeki herhangi bir dosya) Systemd hizmetini otomatik olarak yeniden başlatın


25

Bir dosya değiştiğinde bir Systemd hizmetini nasıl yeniden başlatırım. Herhangi bir jar dosyası değiştiğinde yeniden yüklemek istediğim bir Java hizmetim var.

Bu benim kurulumum:

srv.service

[Unit]
Description=srv 0.1: Service's description
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/srv
ExecStart=/opt/srv/bin/srv
User=root
Group=root

[Install]
WantedBy=multi-user.target

srv.path

[Path]
PathModified=/opt/srv/lib/

Ayrıca PathChangedbir dizin yerine bir dosyayı kullanarak ve kullanmayı denedim .

Ben hizmet yüklü zaman idam: sudo systemctl daemon-reloadve sudo systemctl enable srv

Teşekkürler!


2
Test edilmedi, bu yüzden bir cevap değil, ancak belgelerden pathbirimlerin sadece diğer birimleri etkinleştirmek (başlatmak) için yararlı olduğu görülüyor . Burada muhtemelen yaratabilecek srv-restart.pathile PathChanged=/opt/srv/lib/ve srv-restart.serviceile ExecStart=systemctl restart srv.service.
Michał Politowski

Görünüşe göre hizmeti (.path ile) aynı şekilde adlandırırsanız, yol dosyası aynı hizmete başvurur: freedesktop.org/software/systemd/man/systemd.path.html ancak ... bilmiyorum yalnızca bir hizmeti başlatırsa veya zaten çalışıyorsa yeniden başlatırsa
sıkışma

Belgelerden anladığım gibi srv.path, sadece eşdeğerini yapabilir systemclt start srv.service, bu nedenle yeniden başlatmaların otomatik olarak başlatılması için hizmetinizi yeniden başlatan başka bir hizmete ihtiyacınız olacaktır.
Michał Politowski

Başlamanız gerekiyor systemctl start srv.path- ve önyüklemeye başlamalısınızsystemctl preset srv.path
Michael D.

Yanıtlar:


22

Michal Politowski'nin yorumu tam olarak doğru. Yeni eserler dağıtıldığında hizmetleri otomatik olarak yeniden başlatmak için bu yöntemi kullanıyorum. Çok faydalı.

Açık olmak için ihtiyacınız olan:

srv.service

[Unit]
Description=srv 0.1: Service's description
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/srv
ExecStart=/opt/srv/bin/srv
User=root
Group=root

[Install]
WantedBy=multi-user.target

srv-watcher.service

[Unit]
Description=srv restarter
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart srv.service

[Install]
WantedBy=multi-user.target

srv-watcher.path

[Path]
PathModified=/opt/srv/lib

[Install]
WantedBy=multi-user.target

7
Çok sayıda dosyanın hızlı bir şekilde art arda değişmesi durumunda bunun ne zaman tetikleneceğine dair herhangi bir garanti var mı?
Rich Remer

3
«.Path» biriminin de etkinleştirilmesi gerektiğini hatırlamak önemlidir. Bu durumda:systemctl enable srv-watcher.path && systemctl start srv-watcher.path
Pau Ruŀlan Ferragut 13:18

1
Senin yeniden başlatma hizmeti aynı adı taşıyan değilse .path dosyanın sonra sadece eklemek Unit=nameofmyrestart.serviceiçin [Path]sizin bölümünde .pathdosyası. freedesktop.org/software/systemd/man/systemd.path.html#Unit=
DKebler

Kestrel'i yeniden başlatmak için CentOS'ta iyi çalışıyor (ASP.NET Core)
Suleman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.