मैंने एक प्रोग्राम लिखा है जो एक Postgres डेटाबेस का उपयोग करता है, और मैंने इसके लिए एक सिस्टमड सर्विस फ़ाइल लिखी है। वर्तमान में मेरी सेवा ठीक-ठीक बूट पर शुरू हो जाती है, और जब पोस्टग्रेज को अपग्रेड (बंद) के लिए रोका जाता है तो यह बंद हो जाता है apt upgrade
। हालाँकि, जब नवीनीकरण पूरा हो जाता है और पोस्टग्रेज को फिर से शुरू किया जाता है, तो मेरी सेवा स्वचालित रूप से शुरू नहीं होती है।
क्या मैं अपनी सेवा को फिर से स्वचालित रूप से शुरू करने के लिए कुछ निर्भरता को परिभाषित कर सकता हूं?
पोस्टग्रेज के अपग्रेड के दौरान इसे स्वचालित रूप से रोक दिए जाने के बाद यह मेरी सेवा की स्थिति है:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
ध्यान दें कि मैं मैन्युअल रूप से सेवा को फिर से ठीक शुरू कर सकता हूं।
यहाँ मेरी सेवा फ़ाइल है:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
मैं जोड़ने की कोशिश की है PartOf=postgresql.service
और BindsTo=postgresql.service
, और फिर मैन्युअल रूप से रोकने और Postgres शुरू करने, लेकिन न तो मदद की।
बेशक, मैं इसे हटा सकता था Requires
, लेकिन दोनों सेवाओं को एक साथ रोकना बेहतर है, अगर केवल वे दोनों वापस शुरू कर देंगे।
Requires=
हटाए जाने की कोशिश की , इससे कोई मदद नहीं मिली। मुझे लगता है कि समस्या यह है कि PartOf=
लिंक "इकाइयों को रोकना और फिर से शुरू करना" है, लेकिन अपग्रेड के दौरान पोस्टग्रेज को फिर से शुरू नहीं किया गया है। इसे रोका गया, अपग्रेड किया गया और शुरू किया गया।
systemctl restart postgresql
, तो सिस्टमड अपनी निर्भर सेवाओं को फिर से शुरू करने के लिए याद करता है। ऐसा लगता है कि किसी कारण से, के संयोजन के बजाय stop
और के start
बजाय restart
।
PartOf=
सही समाधान की तरह लगता है। क्या आपने इसेRequires=
हटाने की कोशिश की ?