আমার একটি সমালোচনামূলক অ্যাপ্লিকেশন রয়েছে যা সিস্টেমড দ্বারা পরিষেবা হিসাবে চালিত হয়।
ব্যর্থতা হওয়ার সাথে সাথে এটি পুনরায় চালু করার জন্য সেট আপ করা হয়েছে।
অ্যাপ্লিকেশনটি পুনরায় চালু হলে কীভাবে ইমেল প্রেরণ করা যায়?
আমার একটি সমালোচনামূলক অ্যাপ্লিকেশন রয়েছে যা সিস্টেমড দ্বারা পরিষেবা হিসাবে চালিত হয়।
ব্যর্থতা হওয়ার সাথে সাথে এটি পুনরায় চালু করার জন্য সেট আপ করা হয়েছে।
অ্যাপ্লিকেশনটি পুনরায় চালু হলে কীভাবে ইমেল প্রেরণ করা যায়?
উত্তর:
প্রথমে আপনার দুটি ফাইল দরকার: মেল প্রেরণের জন্য একটি এক্সিকিউটেবল এবং এক্সিকিউটেবল শুরু করার জন্য একটি। সার্ভিস। এই উদাহরণস্বরূপ, এক্সিকিউটেবল কেবল শেল স্ক্রিপ্ট ব্যবহার করে sendmail
:
/usr/local/bin/systemd-email:
#!/bin/bash
/usr/bin/sendmail -t <<ERRMAIL
To: $1
From: systemd <root@$HOSTNAME>
Subject: $2
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
$(systemctl status --full "$2")
ERRMAIL
আপনি যেটুকু এক্সিকিউটেবল ব্যবহার করুন না কেন এটি শেল স্ক্রিপ্টের মতো সম্ভবত কমপক্ষে দুটি আর্গুমেন্ট গ্রহণ করা উচিত: পাঠানোর জন্য ঠিকানা এবং ইউনিট ফাইলের স্ট্যাটাস পাওয়ার জন্য। .service
আমরা এই আর্গুমেন্ট পাস হবে তৈরি করুন:
/etc/systemd/system/status-email-user@.service:
[Unit]
Description=status email for %i to user
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email address %i
User=nobody
Group=systemd-journal
যেখানে ব্যবহারকারীকে ইমেল করা হচ্ছে এবং ঠিকানাটি সেই ব্যবহারকারীর ইমেল ঠিকানা। যদিও প্রাপক কঠোর কোডেড, তবে রিপোর্ট করার জন্য ইউনিট ফাইলটি উদাহরণ প্যারামিটার হিসাবে পাস করা হয়েছে, সুতরাং এই এক পরিষেবাটি আরও অনেক ইউনিটের ইমেল প্রেরণ করতে পারে। এই সময়ে আপনি status-email-user@dbus.service
যাচাই করতে শুরু করতে পারেন যে আপনি ইমেলগুলি পেতে পারেন receive
তারপরে আপনি যে পরিষেবাটির জন্য ইমেল চান সেটিকে কেবল সম্পাদনা করুন OnFailure=status-email-user@%n.service
এবং [Unit]
বিভাগটিতে যুক্ত করুন। %n
ইউনিটের নাম টেমপ্লেটে পাস করে।
ExecStartPost
যে সঠিক পছন্দ কিনা : এটি একটি "স্বাভাবিক" শুরু হওয়ার পরে, কেবল ব্যর্থতার ক্ষেত্রেই নয়, ডানদিকে ?
@Gf_ এর প্রস্তাবিত সমাধানটি সেন্টোস 7-এ ক্লিক করা পরিস্থিতি আমাদের পরিস্থিতির জন্য ভাল কাজ করেছে। ক্লিকহাউস আমাদের উপর নিয়মিত কিছুটা ক্র্যাশ হয়ে যায় তাই আমাদের এটি দুটিই স্বয়ংক্রিয়ভাবে পুনরায় চালু হওয়া দরকার ছিল এবং পুনরায় চালু হওয়ার পরে আপনাকে অবহিত করা উচিত। যদিও সিস্টেমডে একটি দ্বিতীয় পরিষেবাদি যুক্ত করা কিছুটা বিশৃঙ্খল বলে মনে হচ্ছে, এটি সিস্টেমড ডিজাইনের কারণে প্রয়োজনীয়।
বলা হচ্ছে, অটো-রিস্টার্ট করার সাথে এই সমাধানটি যখন আমরা সেন্টোস 8 এ মোতায়েন করেছি তখন আমাদের জন্য কাজ করা বন্ধ করে দিয়েছে। এটি কারণ সি 8-এ প্রেরিত সিস্টেমড ভি ভি 239 OnFailure=
একটি অ-ডিফল্ট কনফিগারেশন Restart=
( Restart=on-failure
আমাদের ক্ষেত্রে) এর সাথে মিলিত হয়ে শব্দার্থবিজ্ঞানের পরিবর্তনের সূচনা করেছিল । নতুন OnFailure=
আচরণটি কেবলমাত্র এক শট পরিষেবাটিকে ট্রিগার করে যদি পুনরায় আরম্ভ সম্পূর্ণরূপে ব্যর্থ হয়, কেবল ক্র্যাশের পরে নয়। এই নতুন আচরণটি আনন্দের সাথে পরিষেবাটি পুনরায় আরম্ভ করবে, তবে আমরা OnFailure=
আর ইমেলটি পাইনি কারণ আর আর অনুরোধ করা হয়নি।
আমাদের প্রাথমিক প্রত্যাশাটি নোট করুন: আমরা চাই যে সিস্টেমড প্রক্রিয়াটি পুনরায় আরম্ভ করতে এবং একটি ইমেল বিজ্ঞপ্তি প্রেরণ করবে। V239 আপডেটটি আমাদের পূর্ববর্তী সমাধানটিকে জিএফ_এর দ্বারা উদ্ধৃত করে আর কাজ করে না। ভাগ্যক্রমে আমরা এই কাজ পেতে সক্ষম হয়েছি।
আমাদের সমাধানটি ExecStopPost
ইমেল বিজ্ঞপ্তি স্ক্রিপ্ট শুরু করার জন্য ব্যবহার করা। এটি ঠিকঠাক কাজ করে, তবে এখন একটি নতুন সমস্যা এলো: সার্ভার স্টার্টআপের মতো ক্লিকহাউস পরিষেবাটি সাধারণত শুরু করা হলে একটি ইমেল বিজ্ঞপ্তি প্রেরণ করা হয়েছিল। যদিও কোনও বড় বিষয় নয়, আদর্শভাবে আমরা কেবল ক্র্যাশের সময় ইমেল বিজ্ঞপ্তি পেতে চেয়েছিলাম । আমরা আমাদের ইমেল স্ক্রিপ্টে নিম্নলিখিত কোড যুক্ত করে এটি অর্জন করতে সক্ষম হয়েছি:
# Don't do anything if the service intentionally stopped successfully.
if [ $SERVICE_RESULT == "success" ]; then
exit
fi
... $SERVICE_RESULT
হ'ল একটি পরিবেশ পরিবর্তনশীল যা এর টার্গেট প্রক্রিয়াতে সিস্টেমড দ্বারা সরবরাহ করা হয় ExecStopPost
। success
ফলাফলটি পরীক্ষা করে , আমরা ধরে নিই যে এই অনুরোধটি একটি সাধারণ শুরু বা শাটডাউন থেকে এসেছিল এবং কিছুই করে না। অন্য কোনও মান যেমন signal
, কোনও স্ক্রিপ্ট একটি ইমেল প্রেরণে চালিয়ে যেতে থাকবে। এই ভেরিয়েবলের সম্ভাব্য মানগুলি ডকুমেন্টেশনে বর্ণিত হয়েছে ।
প্রাথমিক সমাধানের জন্য gf_ কে ধন্যবাদ আমি আশা করি CentOS8 এর জন্য লোকেরা আমার আপডেটটি সহায়ক বলে মনে করবে। আরও কিছু লিঙ্ক যা আমাকে সাহায্য করেছিল:
আপনি সিস্টেমেড সার্ভিস বিকল্প এক্সিকিস্টার্টপোস্টটি ব্যবহার করার চেষ্টা করতে পারেন।
বর্ণনাটি এখানে উপলব্ধ:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
পরিষেবা সংজ্ঞা ফাইলটিতে এই বিকল্পের আরও ঘোষণা থাকতে পারে। এটি একের পর এক ট্রিগার হয়েছিল।
আপনার সিস্টেমে আপনারও কয়েকটি উদাহরণ থাকবে।
আপনি পরিষেবার স্থিতি পরীক্ষা করতে এবং সার্ভার বুটআপ করার সময় ইমেল প্রেরণের জন্য একটি শেল স্ক্রিপ্ট তৈরি করতে পারেন। এই লিঙ্কটি আপনাকে সাহায্য করতে পারে