আমি একটি প্রোগ্রাম লিখেছি যা পোস্টগ্রিস ডাটাবেস ব্যবহার করে এবং আমি এটির জন্য একটি সিস্টেমড পরিষেবা ফাইল লিখেছিলাম। বর্তমানে আমার পরিষেবাটি ঠিকঠাক বুটে চালু হবে এবং পোস্টগ্র্রেস আপগ্রেড করার জন্য বন্ধ হয়ে গেলে (এটি 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, এবং তারপরে ম্যানুয়ালি পোস্টগ্র্রেস বন্ধ করে এবং শুরু করার চেষ্টা করেছি , কিন্তু কোনওরকম সাহায্যই করেনি।
অবশ্যই আমি মুছে ফেলতে পারতাম Requires, তবে উভয় পরিষেবা একসাথে বন্ধ করাই শ্রেয়, কেবল যদি তারা উভয়ই ব্যাক আপ শুরু করে।
Requires=মুছে ফেলার চেষ্টা করেছি, তাতে কোনও লাভ হয়নি। আমি মনে করি যে সমস্যাটি হ'ল PartOf="ইউনিটগুলি থামানো এবং পুনরায় চালু করা" লিঙ্কগুলি, তবে পোস্টগ্র্রেস আপগ্রেডের সময় পুনরায় আরম্ভ হয় নি । এটি বন্ধ, আপগ্রেড এবং শুরু হয়েছে।
systemctl restart postgresqlতার পুনরায় নির্ভরশীল পরিষেবাগুলি পুনরায় আরম্ভ করার কথা মনে রাখে। এটি উপযুক্ত হিসাবে মনে হয়, কোনও কারণে, এর পরিবর্তে stopএবং এর সংমিশ্রণ করে । startrestart
PartOf=সঠিক সমাধান মত শোনাচ্ছে। আপনি কিRequires=মুছে ফেলার চেষ্টা করেছেন ?