মেশিন শাটডাউন / রিবুট হওয়ার আগে কর্কশভাবে প্রস্থান করার জন্য পরিষেবাটির জন্য অপেক্ষা করুন


9

আপনি কীভাবে এমন একটি সিস্টেমড সার্ভিস লিখবেন যা মেশিন শাটডাউন বা রিবুট বন্ধ করে দেয়? বিশেষত, এটি মেশিন শাটডাউনটি বিলম্বিত করা উচিত যতক্ষণ না এটি নিখুঁতভাবে প্রস্থান করে।

আমার একটি পরিষেবা আছে যা বন্ধ হতে 10 সেকেন্ড সময় নেয়: /usr/local/bin/shutdowntest.sh:

#!/bin/bash

SHUTDOWN=0
SHUTDOWN_TIME=10
TRAPPED_SIGNAL=

function onexit() {
  TRAPPED_SIGNAL=$1
  SHUTDOWN=1
}

for SIGNAL in SIGINT SIGTERM SIGHUP SIGPIPE SIGALRM SIGUSR1 SIGUSR2; do
  trap "onexit $SIGNAL" $SIGNAL
done

echo >&2 "shutdowntest running"
while ((!SHUTDOWN || SHUTDOWN_TIME>0)); do
  if [[ -n "$TRAPPED_SIGNAL" ]]; then
    echo >&2 "shutdowntest received signal $TRAPPED_SIGNAL"
    TRAPPED_SIGNAL=
  elif ((SHUTDOWN)); then
    echo >&2 "shutdowntest Shutting down: $SHUTDOWN_TIME more sleeps"
    SHUTDOWN_TIME=$((SHUTDOWN_TIME-1))
    sleep 1
  else
    sleep 10
  fi
done
echo >&2 "shutdowntest Finished shutting down; quitting"

আমি টাইমআউটসটপসেককে /etc / সিস্টেমেড / সিস্টেমে / শাটডাউনস্টেস্টে সার্ভিস 15 এ সেট করেছি:

[Service]
ExecStart=/usr/local/bin/shutdowntest.sh
TimeoutStopSec=15

[Install]
WantedBy=multi-user.target

আমি যখন চালনা করি তখন sudo systemctl stop shutdowntest.serviceপরিষেবাটি নিখুঁতভাবে বন্ধ করে দেয় /var/log/syslog:

00:57:11 shutdowntest.sh[1980]: shutdowntest received signal SIGTERM
00:57:11 shutdowntest.sh[1980]: shutdowntest Shutting down: 10 more sleeps
00:57:11 systemd[1]: Stopping shutdowntest.service...
00:57:11 shutdowntest.sh[1980]: Terminated
00:57:11 shutdowntest.sh[1980]: shutdowntest Shutting down: 9 more sleeps
00:57:12 shutdowntest.sh[1980]: shutdowntest Shutting down: 8 more sleeps
00:57:13 shutdowntest.sh[1980]: shutdowntest Shutting down: 7 more sleeps
00:57:14 shutdowntest.sh[1980]: shutdowntest Shutting down: 6 more sleeps
00:57:15 shutdowntest.sh[1980]: shutdowntest Shutting down: 5 more sleeps
00:57:16 shutdowntest.sh[1980]: shutdowntest Shutting down: 4 more sleeps
00:57:17 shutdowntest.sh[1980]: shutdowntest Shutting down: 3 more sleeps
00:57:18 shutdowntest.sh[1980]: shutdowntest Shutting down: 2 more sleeps
00:57:19 shutdowntest.sh[1980]: shutdowntest Shutting down: 1 more sleeps
00:57:20 shutdowntest.sh[1980]: shutdowntest Finished shutting down; quitting
00:57:20 systemd[1]: Stopped shutdowntest.service.

কিন্তু যখন আমি sudo rebootবা sudo shutdown nowমেশিনটি থাকি তখন পরিষেবাটি নিখুঁতভাবে প্রস্থান করার জন্য পর্যাপ্ত সময় ব্যতীত মারা যায় এবং / var / লগ / সিসলগটি কেবল 1s পরে শেষ হয়।

00:59:30 shutdowntest.sh[2014]: Terminated
00:59:30 shutdowntest.sh[2014]: shutdowntest received signal SIGTERM
00:59:30 shutdowntest.sh[2014]: shutdowntest Shutting down: 10 more sleeps
00:59:30 systemd[1]: Stopping shutdowntest.service...

মেশিনটি শাটডাউন বা পুনরায় বুট করার পরে পরিষেবাটি প্রস্থান করার সময় ( TimeoutSecবা TimeoutStopSec) সময় দেওয়া হয়েছে তা কীভাবে নিশ্চিত করবেন ?


1
সিস্টেমডের পরিষেবাটি বন্ধ হওয়ার জন্য ইতিমধ্যে অপেক্ষা করা উচিত। আপনি journalctl -u shutdowntest.serviceসরাসরি দেখার পরিবর্তে জার্নালে ( ) দিয়ে পরীক্ষা করতে পারেন /var/log/syslog? আমি ভাবছি যদি আপনার সার্ভিসের আগে সিসলগ বন্ধ না করা হয় এবং তারপরে বাকি আউটপুটটি লগ না করা হয়
বিগন

উত্তর:


4

Bigon থেকে মন্তব্য সঠিক। আমি সন্ধান করছিলাম /var/log/syslog, তবে এটি লিখেছেন rsyslog.service, যা সিস্টেমড শাটডাউন প্রক্রিয়াতে খুব শীঘ্রই বন্ধ হয়ে যায় (নীচে "স্টপড সিস্টেম লগিং পরিষেবা" দ্বারা নির্দেশিত)।

আমি ক্রমাগত journald লগিং পরিবর্তে সক্রিয় ( Storage=persistentমধ্যে /etc/systemd/journald.confএবং systemctl restart systemd-journald), journalctl -b-1 -u shutdowntest.serviceশো যে আমার সেবা প্রকৃতপক্ষে সিস্টেম পর শাট ডাউন যথেষ্ট সময় দেওয়া হয় rebooted, shutdownঅথবা পরে পাওয়ার কী চাপা হয় (ACPI সংক্রান্ত G2 নরম অফ)।

journalctl -b-1 -u shutdowntest.service -u rsyslog.service -u systemd-logind
-- Logs begin at Mon 2018-03-26 18:39:12 UTC, end at Mon 2018-03-26 20:22:34 UTC. --
…
Mar 26 18:46:46 myhost systemd-logind[1202]: Power key pressed.
Mar 26 18:46:46 myhost systemd-logind[1202]: Powering Off...
Mar 26 18:46:46 myhost systemd-logind[1202]: System is powering down.
Mar 26 18:46:46 myhost shutdowntest.sh[1237]: Terminated
Mar 26 18:46:46 myhost shutdowntest.sh[1237]: shutdowntest received signal SIGTERM
Mar 26 18:46:46 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 10 more sleeps
Mar 26 18:46:46 myhost systemd[1]: Stopping shutdowntest.service...
Mar 26 18:46:46 myhost systemd[1]: Stopping Login Service...
Mar 26 18:46:46 myhost systemd[1]: Stopped Login Service.
Mar 26 18:46:46 myhost systemd[1]: Stopping System Logging Service...
Mar 26 18:46:47 myhost systemd[1]: Stopped System Logging Service.
Mar 26 18:46:47 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 9 more sleeps
Mar 26 18:46:48 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 8 more sleeps
Mar 26 18:46:49 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 7 more sleeps
Mar 26 18:46:50 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 6 more sleeps
Mar 26 18:46:51 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 5 more sleeps
Mar 26 18:46:52 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 4 more sleeps
Mar 26 18:46:53 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 3 more sleeps
Mar 26 18:46:54 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 2 more sleeps
Mar 26 18:46:55 myhost shutdowntest.sh[1237]: shutdowntest Shutting down: 1 more sleeps
Mar 26 18:46:56 myhost shutdowntest.sh[1237]: shutdowntest Finished shutting down; quitting
Mar 26 18:46:56 myhost systemd[1]: Stopped shutdowntest.service.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.