আমার নির্ভরযোগ্যতা আপগ্রেড করা হলে কীভাবে আমার সিস্টেমেড পরিষেবাটি পুনরায় চালু করা যায়


11

আমি একটি প্রোগ্রাম লিখেছি যা পোস্টগ্রিস ডাটাবেস ব্যবহার করে এবং আমি এটির জন্য একটি সিস্টেমড পরিষেবা ফাইল লিখেছিলাম। বর্তমানে আমার পরিষেবাটি ঠিকঠাক বুটে চালু হবে এবং পোস্টগ্র্রেস আপগ্রেড করার জন্য বন্ধ হয়ে গেলে (এটি 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, তবে উভয় পরিষেবা একসাথে বন্ধ করাই শ্রেয়, কেবল যদি তারা উভয়ই ব্যাক আপ শুরু করে।


PartOf=সঠিক সমাধান মত শোনাচ্ছে। আপনি কি Requires=মুছে ফেলার চেষ্টা করেছেন ?
meuh

@ মিউহ আমি এখন এটিকে Requires=মুছে ফেলার চেষ্টা করেছি, তাতে কোনও লাভ হয়নি। আমি মনে করি যে সমস্যাটি হ'ল PartOf="ইউনিটগুলি থামানো এবং পুনরায় চালু করা" লিঙ্কগুলি, তবে পোস্টগ্র্রেস আপগ্রেডের সময় পুনরায় আরম্ভ হয় নি । এটি বন্ধ, আপগ্রেড এবং শুরু হয়েছে।
রেনেক্স

মজাদারভাবে যথেষ্ট, আপনি যখন করবেন তখন সিস্টেমড systemctl restart postgresqlতার পুনরায় নির্ভরশীল পরিষেবাগুলি পুনরায় আরম্ভ করার কথা মনে রাখে। এটি উপযুক্ত হিসাবে মনে হয়, কোনও কারণে, এর পরিবর্তে stopএবং এর সংমিশ্রণ করে । startrestart
ডাব্লুজিএইচ

উত্তর:


13

আমি উত্তরটি পেয়েছি: আমাকে পরিষেবা ফাইলের শেষ লাইনটি এতে পরিবর্তন করতে হবে:

WantedBy=postgresql.service

এইভাবে, যখনই পোস্টগ্র্রেস শুরু হয়, আমার পরিষেবাটিও শুরু হয়ে যায় - তবে যদি আমার পরিষেবা ব্যর্থ হয় তবে তা পোস্টগ্র্রেসকে থামায় না।

[Install]বিভাগের দিকনির্দেশগুলি কেবল ইউনিটগুলি সক্ষম ও অক্ষম করে। যখন আমার পরিষেবাটি ইতিমধ্যে সক্ষম করা ছিল তখন এটি সহজ ছিল না:

# systemctl enable tabill.service
Failed to execute operation: Too many levels of symbolic links

ত্রুটি বার্তাটি বিভ্রান্তিকর ছিল। এটি ঠিক করা সহজ ছিল:

# systemctl disable tabill.service
Removed symlink /etc/systemd/system/tabill.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/tabill.service.

# systemctl enable tabill.service
Failed to execute operation: No such file or directory

# systemctl enable /srv/tabill/tabill.service
Created symlink from /etc/systemd/system/postgresql.service.wants/tabill.service to /srv/tabill/tabill.service.
Created symlink from /etc/systemd/system/tabill.service to /srv/tabill/tabill.service.

এখন যখন আমার পোস্টগ্র্রেস করে তখন আমার পরিষেবা বন্ধ হয়ে যায় এবং শুরু হয়। সিস্টেম বুট হয়ে গেলে এবং স্বাভাবিকভাবেই পোস্টগ্রিস শুরু হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.