সিস্টেমেড সহ শাটডাউনে সমস্ত কিছুর আগে আমি কীভাবে স্ক্রিপ্ট চালাব?


17

দ্রষ্টব্য: সংক্ষেপে সূচিত প্রশ্ন নীচে পাওয়া যাবে।

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা বাইরের ইউএসবি ড্রাইভে আমার ফাইলগুলির একটি ব্যাকআপ তৈরি করে। আমি যে নতুন ডেটা তৈরি করেছি তার উপর নির্ভর করে এটি কার্যকর করতে কিছুটা সময় নিতে পারে। আমি এটি সিস্টেমের প্রতিটি শাটডাউনে স্বয়ংক্রিয়ভাবে চালাতে চাই।

আমি ফেডোরা 23 ব্যবহার করছি সর্বশেষ আপডেট (সিস্টেমড) সহ with

আমি এটি বেশ কয়েকটি উপায়ে অর্জন করার চেষ্টা করেছি, কিন্তু আমি এটি কাজে লাগাতে পারি না।

স্টপএেক্সেক দিয়ে দীর্ঘ প্রক্রিয়া চলছে

autobackup.service:

[Unit]
Description=Slow backup script
Requires=local-fs.target

[Service]
ExecStart=/bin/true
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multiuser.target

আমি এটি দিয়ে সক্রিয় করেছি systemctl enable autobackup.serviceএবং এটি দিয়ে শুরু করেছি systemctl start autobackup.service

আমার বুট লগের অংশ ( journalctl -b-1):

Dez 22 17:45:27 localhost systemd[1]: Unmounted /mnt/BACKUP.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At subvol /home/BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: parent subvol is not reachable from inside the root subvol.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At snapshot BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: failed to dump stream. Broken pipe
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Control process exited, code=exited status=1
Dez 22 17:45:27 localhost systemd[1]: Stopped Slow backup script.
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Unit entered failed state.

মনে রাখবেন যে আমি এর মধ্যে কিছু সংক্ষিপ্ত করে দেখিনি, এটি স্ক্রিপ্টটি শুরু হওয়ার ঠিক আগেই আনমাউন্ট করা / এমএনটি / ব্যাকআপ, মজার মজাদার ঘটনা ..

শাটডাউন.টারাগেটের আগে

autobackup.service:

[Unit]
Description=Slow backup script
DefaultDependencies=no
Before=shutdown.target

[Service]
ExecStart=/etc/systemd/system/do_backup.sh
Type=oneshot

systemctl edit shutdown.target

[Unit]
Requires=autobackup.service

আউটপুট মূলত একই।

সমস্যাটি

আমি মনে করি সমস্যাটি হ'ল সিস্টেমেড আমার স্ক্রিপ্টটি উভয় ক্ষেত্রেই অন্যান্য সমস্ত শাটডাউন স্ক্রিপ্টগুলির সাথে সমান্তরালে শুরু করে, যা ব্যাকআপ আনমাউন্ট করে এবং পাইপ অবকাঠামো নিষ্ক্রিয় করে তোলে (অন্য কোনও ত্রুটি আমি মাঝে মধ্যে পেয়েছিলাম, যখন আনমাউন্টটি খুব দ্রুত ছিল না)।

প্রশ্নটি

আমি প্রথমে আমার স্ক্রিপ্টটি শাটডাউন শুরু করার জন্য কীভাবে সিস্টেমে শিখতে পারি, এটি বের না হওয়া পর্যন্ত অপেক্ষা করুন এবং তারপরে বাকী শাটডাউন স্ক্রিপ্ট / লক্ষ্যগুলি / ইউনিটগুলি / যাই হোক না কেন শুরু করুন?

উত্তর:


12

পরিষেবা ফাইল তৈরি বা সম্পাদনা করার দরকার নেই। আপনার স্ক্রিপ্টটি কেবল এতেই ফেলে দিন

/usr/lib/systemd/system-shutdown/

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

বাস্তব সিস্টেমটি কার্যকর করার আগে অবিলম্বে হোল্ড / পাওয়ার অফ / রিবুট / কেেক্সেক সিস্টেমড-শাটডাউন সমস্ত এক্সিকিউটেবলকে / usr / lib / systemd / system-shutdown / এ চালাবে এবং একটি আর্গুমেন্ট তাদের কাছে দেবে: হয় "থাম", "পাওয়ার অফ", "রিবুট" "বা" কেক্সেক ", নির্বাচিত ক্রিয়াটির উপর নির্ভর করে। এই ডিরেক্টরিতে সমস্ত এক্সিকিউটেবল সমান্তরালভাবে সম্পাদন করা হয় এবং সমস্ত এক্সিকিউটেবল শেষ হওয়ার আগে ক্রিয়াকলাপ চালানো হয় না।

আমি কেবল এটি পিসি স্পিকার বীপ করতে ব্যবহার করি।


2
আপনি কি এই ডিরেক্টরি তৈরি করতে হবে? আমার এটি উবুন্টু ১.0.০৪ তে বা রাস্পবিয়ান (জেসি) - তে নেই, উভয়ই সিস্টেম ভিত্তিক।
ওউজে

2
ডেবিয়ান সিস্টেমগুলি বিভিন্ন পথ ব্যবহার করে /lib/systemd/system-shutdown/। ফাইলগুলি ইতিমধ্যে কেবল পঠনযোগ্য মাউন্ট করার পরে, এই স্ক্রিপ্টগুলি শটডাউন করার পরে খুব দেরিতে সম্পাদিত হয় এবং এছাড়াও সচেতন হন। সুতরাং ফাইল সিস্টেমে যে কোনও লেখার অ্যাক্সেস ব্যর্থ হবে যদি না পঠন-রাইটিং ( mount -oremount,rw /) হিসাবে পুনঃনির্মাণ হয় । / Usr / lib / systemd / system-shutdown / রিবুট বা শাটডাউন এ স্ক্রিপ্টগুলি কীভাবে সম্পাদন করবেন
ফ্রাঙ্ক ব্রেকিটল

9
ওপি শাটডাউনে "অন্য কিছুর আগে" সম্পাদিত স্ক্রিপ্টের জন্য বলেছিল। সিস্টেম-শাটডাউন স্ক্রিপ্টগুলি কার্নেলটি মেরে ফেলার আগেই সমস্ত কিছুর পরে কার্যকর করা হয়।
গ্রেগ আলেকজান্ডার

11

আমি বুঝতে পেরেছি!

স্টপএক্সেক দিয়ে দীর্ঘ চলমান প্রক্রিয়াটি সমাধান করুন এবং এর মতো এটি সংশোধন করুন:

autobackup.service:

[Unit]
Description=Slow backup script
RequiresMountsFor=/mnt/BACKUP /home

[Service]
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

লাইনটি নোট করুন:

RequiresMountsFor=/mnt/BACKUP /home

এটি এইভাবে প্রত্যাশার মতো কাজ করে।


2
আপনার এটি করার দরকার নেই systemctl editsystemctl enable autobackupএকই প্রভাব রয়েছে এবং এটি আরও মুশকিল, এবং [Install]আপনার ইউনিটটিতে ইতিমধ্যে বিভাগটি রয়েছে তাই এটি কাজ করা উচিত । যদিও আপনাকে সেই টারপোটি টার্গেট নামে সংশোধন করতে হবে, যদিও। ;)
স্টিফান মাজেউভস্কি

ওএমজি আমি এতক্ষণ অনুসন্ধান করছিলাম যে কোনও ড্রাইভ আনমাউন্ট না হওয়ার আগে আমার ব্যাকআপ স্ক্রিপ্ট কল করার সমাধানের জন্য। ধন্যবাদ!
ডেনারসিন

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