উত্তর:
প্রস্তাবিত সমাধানটি হ'ল পরিষেবা ইউনিটটিকে একটি সাধারণ পরিষেবা হিসাবে চালানো - [Install]
বিভাগটি দেখুন। সুতরাং সবকিছু বিপরীত, নির্ভরতাও চিন্তা করতে হবে। কারণ শাটডাউন অর্ডারটি বিপরীত প্রারম্ভিক ক্রম order এজন্য স্ক্রিপ্টটি রাখতে হবে ExecStop=
।
নিম্নলিখিত সমাধানটি আমার জন্য কাজ করছে:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
যখন আপনার কোনও ExecStart
ক্রিয়া নেই তখন প্রয়োজন is
ফাইলটি তৈরির পরে, নিশ্চিত হয়ে নিন systemctl daemon-reload
এবং systemctl enable yourservice --now
।
আমি কেবল এটি সিস্টেমড আইআরসি থেকে পেয়েছি, ক্রেডিটগুলি মেজকালেরোতে যাচ্ছে।
RemainAfterExit=true
প্রয়োজন ExecStart
কারণ এটি মনে করে যে পরিষেবাটি চলছে না তা systemd
চালানোর চেষ্টা করবে না ExecStop
। RemainAfterExit=true
কারণ systemd
থেকে বিশ্বাস যে সেবা চলছে, যার ফলে এটি চালানোর জন্য ঘটাচ্ছে ExecStop
হরতাল হয়।
আমি যতদূর দেখতে পাচ্ছি এটি আমার যা প্রয়োজন তা করে (তবে ঠিক কেন জানি না)।
[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot
kexec.target
করার আগে একটু
WantedBy=shutdown.target reboot.target halt.target
না করেন তবে এটি কীভাবে কাজ করবে তা আমি দেখতে পাচ্ছি না [Unit]
। Before=
& After=
নির্ভরতা পরিবর্তন করবেন না।
যেকোন রিবুট / শাটডাউন / হাল্ট / কেক্সেক পরিষেবা শুরু করার আগে কোনও পরিষেবা চালানোর জন্য (যেমন শেষ মুহুর্তে রুট ফাইল সিস্টেম পুনরায় পঠনযোগ্য হয়ে উঠার আগে) এই পরিষেবা কনফিগারেশনটি ব্যবহার করুন:
[Unit]
Description=Save system clock on shutdown
DefaultDependencies=no
After=final.target
[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
[Install]
WantedBy=final.target
এটি দিয়ে এটি সক্ষম করুন:
systemctl enable my_service.service
প্রকৃত রিবুট / শাটডাউন / হলট / কেেক্সেকের ঠিক আগে স্ক্রিপ্ট চালানো (যখন আপনি রুট ফাইল সিস্টেমে লিখতে পারবেন না, কারণ এটি কেবল পঠনযোগ্য পুনরায় সঞ্চারিত হয়েছিল) /usr/lib/systemd/system-shutdown
ডিরেক্টরিতে এই স্ক্রিপ্টটি এক্সিকিউটেবল যুক্ত করুন ।
প্রকৃত সিস্টেম হোল্ট / পাওয়ার অফ / রিবুট / কেেক্সেক সিস্টেমড-শাটডাউন কার্যকর করার পূর্বে / ইউএসআর / লাইব / সিস্টেমড / সিস্টেম-শাটডাউন / এ সমস্ত এক্সিকিউটেবল চালিত হবে এবং তাদের কাছে একটি আর্গুমেন্ট পাস করবে: হয় "থাম", "পাওয়ার অফ", "রিবুট "বা" কেক্সেক ", নির্বাচিত ক্রিয়াটির উপর নির্ভর করে। এই ডিরেক্টরিতে সমস্ত এক্সিকিউটেবল সমান্তরালভাবে কার্যকর করা হয় এবং সমস্ত এক্সিকিউটেবল শেষ হওয়ার আগে ক্রিয়াকলাপ কার্যকর করা হয় না।
আরও দেখুন:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
final.target
। আদর্শভাবে আমি চাই যে ব্যবহারকারী এটি করার পরে এটিই প্রথম কার্যকর করা হবে $ sudo reboot
।
আমি পুরোপুরি নিশ্চিত নই তবে আমি মনে করি না যে আপনার ইনস্টল অংশটি প্রয়োজন যদিও আমি এটি স্পষ্টভাবে যুক্ত করেছি। আমি এটিও পরীক্ষা করে দেখিনি তবে আমার মনে হয় এটি আপনাকে শুরু করতে সহায়তা করবে:
[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no
[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
ExecStart=/bin/true
।