যদি একটি সিস্টেমড পরিষেবা পুনরায় চালু হয় তবে কীভাবে ইমেল প্রেরণ করবেন?


8

আমার একটি সমালোচনামূলক অ্যাপ্লিকেশন রয়েছে যা সিস্টেমড দ্বারা পরিষেবা হিসাবে চালিত হয়।

ব্যর্থতা হওয়ার সাথে সাথে এটি পুনরায় চালু করার জন্য সেট আপ করা হয়েছে।

অ্যাপ্লিকেশনটি পুনরায় চালু হলে কীভাবে ইমেল প্রেরণ করা যায়?


2
আমি এটি সিস্টেমেড দিয়ে কীভাবে করব তা জানি না, তবে মনিট দিয়ে আপনি এটি কোনও প্রক্রিয়া দেখতে পারেন এবং যদি প্রক্রিয়া আইডি পরিবর্তন হয় তবে এটি একটি বিজ্ঞপ্তি পাঠাতে পারে।
জোড়াদেচি

উত্তর:


16

প্রথমে আপনার দুটি ফাইল দরকার: মেল প্রেরণের জন্য একটি এক্সিকিউটেবল এবং এক্সিকিউটেবল শুরু করার জন্য একটি। সার্ভিস। এই উদাহরণস্বরূপ, এক্সিকিউটেবল কেবল শেল স্ক্রিপ্ট ব্যবহার করে 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_

আমি কেন আগ্রহী যে কেন এই ভোটটি বাতিল হয়েছে - দয়া করে আপনার কণ্ঠস্বরটি উত্থাপন করুন এবং কথা বলুন!
gf_

কারণ প্রশ্নটি অন্য কোনও পরিষেবা সম্পর্কে নয়, তবে বিদ্যমান পরিষেবাদি পরিবর্তন। হ্যাঁ, এক্সিকিস্টার্টপোস্ট মেল প্রেরণকে এমনকি সাধারণ শুরুতে ট্রিগার করবে। আমি এমন কিছু সম্পর্কে অবগত নই যা কেবল পুনঃসূচনাতে কাজ করবে।
জারোস্লাভ কুসেরা

@ জারোস্লাভকুসেরা ঠিক আছে, মনে হয় ওপি এর সাথে একমত নয়, তবে অবশ্যই আপনার মতামত রাখুন।
gf_

2

@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হ'ল একটি পরিবেশ পরিবর্তনশীল যা এর টার্গেট প্রক্রিয়াতে সিস্টেমড দ্বারা সরবরাহ করা হয় ExecStopPostsuccessফলাফলটি পরীক্ষা করে , আমরা ধরে নিই যে এই অনুরোধটি একটি সাধারণ শুরু বা শাটডাউন থেকে এসেছিল এবং কিছুই করে না। অন্য কোনও মান যেমন signal, কোনও স্ক্রিপ্ট একটি ইমেল প্রেরণে চালিয়ে যেতে থাকবে। এই ভেরিয়েবলের সম্ভাব্য মানগুলি ডকুমেন্টেশনে বর্ণিত হয়েছে ।

প্রাথমিক সমাধানের জন্য gf_ কে ধন্যবাদ আমি আশা করি CentOS8 এর জন্য লোকেরা আমার আপডেটটি সহায়ক বলে মনে করবে। আরও কিছু লিঙ্ক যা আমাকে সাহায্য করেছিল:

  1. /superuser/1360346/how-to-send-an-email-alert-when-a-linux-service-has-stopped
  2. /unix/422933/confusing-systemd-behaviour-with-onfailure-and-restart
  3. /unix/197636/run-an-arbitrary-command-when-a-service-fails

0

আপনি সিস্টেমেড সার্ভিস বিকল্প এক্সিকিস্টার্টপোস্টটি ব্যবহার করার চেষ্টা করতে পারেন।

বর্ণনাটি এখানে উপলব্ধ:

https://www.freedesktop.org/software/systemd/man/systemd.service.html

পরিষেবা সংজ্ঞা ফাইলটিতে এই বিকল্পের আরও ঘোষণা থাকতে পারে। এটি একের পর এক ট্রিগার হয়েছিল।

আপনার সিস্টেমে আপনারও কয়েকটি উদাহরণ থাকবে।


-1

আপনি পরিষেবার স্থিতি পরীক্ষা করতে এবং সার্ভার বুটআপ করার সময় ইমেল প্রেরণের জন্য একটি শেল স্ক্রিপ্ট তৈরি করতে পারেন। এই লিঙ্কটি আপনাকে সাহায্য করতে পারে

/ubuntu/814/how-to-run-scripts-on-start-up


1
এই প্রশ্নটি বুট করার বিষয়ে নয়, তবে কোনও পরিষেবা পুনরায় চালু করার বিষয়ে, যা বুট করার পরে বেশ কিছুক্ষণ পরে ঘটতে পারে। অতএব, আমি নিশ্চিত না যে আপনার উত্তরটি কোনও সহায়ক কিনা।
gf_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.