जब भी कोई निर्देशिका बदलती है (इसके अंदर कोई भी फ़ाइल) Systemd सेवा को पुनरारंभ करें


25

फ़ाइल बदलने पर मैं एक Systemd सेवा को कैसे पुनः आरंभ करूं। मुझे एक जावा सेवा मिली है जो किसी भी जार फ़ाइल में परिवर्तन होने पर पुनः लोड करना चाहता हूं।

यह मेरा सेटअप है:

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/

मैंने PathChangedएक निर्देशिका के बजाय एक फ़ाइल का उपयोग और उपयोग करने का भी प्रयास किया ।

जब मैंने उस सेवा को स्थापित किया था जिसे मैंने निष्पादित किया था: sudo systemctl daemon-reloadऔर sudo systemctl enable srv

धन्यवाद!


2
परीक्षण नहीं किया गया है इसलिए उत्तर नहीं है, लेकिन प्रलेखन से ऐसा लगता है कि pathइकाइयां केवल अन्य इकाइयों को सक्रिय करने (शुरू करने) के लिए उपयोगी हैं। यहाँ आप शायद बना सकते हैं srv-restart.pathके साथ PathChanged=/opt/srv/lib/और srv-restart.serviceसाथ ExecStart=systemctl restart srv.service
मिशैल पोलित्स्की

ऐसा लगता है कि यदि आप इसे सेवा (.path) के समान नाम देते हैं, तो पथ फ़ाइल उसी सेवा को संदर्भित करती है: freedesktop.org/software/systemd/man/systemd.path.html ... हालाँकि मुझे नहीं पता यह केवल एक सेवा शुरू होता है या तो यह और भी उसे पुन: प्रारंभ करता है, तो यह पहले से ही चल रहा है तो
जाम

जैसा कि मैं इसे डॉक्स से समझता हूं, srv.pathकेवल के बराबर कर सकता हूं systemclt start srv.service, इसलिए पुनरारंभ को स्वचालित करने के लिए आपको एक और सेवा की आवश्यकता होगी, जो कि आपकी सेवा को पुनरारंभ करने पर शुरू हुई थी।
माइकल पोलित्स्की

आपको इसे शुरू करने की आवश्यकता है systemctl start srv.path- और इसे बूट पर शुरू करने के लिएsystemctl preset srv.path
माइकल डी।

जवाबों:


22

मिशल पोलितोव्स्की की टिप्पणी बिल्कुल सही है। जब नई कलाकृतियों को तैनात किया जाता है, तो मैं स्वचालित रूप से सेवाओं को पुनरारंभ करने के लिए इस पद्धति का उपयोग करता हूं। यह बहुत ही उपयोगी है।

स्पष्ट होने के लिए, आपको आवश्यकता है:

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
जब बहुत सारी फाइलें तेजी से उत्तराधिकार में बदली जा रही हों, तो क्या इसकी कोई गारंटी है कि क्या यह ट्रिगर है?
अमीर रेमर

3
यह याद रखना महत्वपूर्ण है कि «.path» इकाई को भी सक्षम करने की आवश्यकता है। इस मामले में:systemctl enable srv-watcher.path && systemctl start srv-watcher.path
पौ रुआलान फेरगुट

1
यदि आपकी पुनरारंभ सेवा .path फ़ाइल के समान नाम की नहीं है, तो बस अपनी फ़ाइल Unit=nameofmyrestart.serviceके [Path]अनुभाग में जोड़ें .pathfreedesktop.org/software/systemd/man/systemd.path.html#Unit=
DKebler

Kestrel (ASP.NET Core)
सुलेमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.