উবুন্টুতে লগআউট / রিবুট / শাটডাউন করার পরে একটি স্ক্রিপ্ট কার্যকর করুন


30

আমি .shউবুন্টু লগআউট এবং শাটডাউনে বাশ ব্যবহার করে একটি ফাইল চালাতে চাই । আমি ওয়েবটি উপরে এবং নীচে অনুসন্ধান করেছি এবং কেবল কেডিএ এবং জিনোমের জন্য ঠিক করেছি। স্ক্রিপ্টটি সহজ, আমি কেবল "লগঅফ / শাটডাউন" ফাইলটিতে কোডের লাইনটি যুক্ত করতে পারি কিনা বা অন্য স্ক্রিপ্টে আমার এটি উল্লেখ করতে হবে কিনা তা জানতে হবে।


1
/Etc/rc0.d, এবং /etc/rc6.d- এ /etc/init.d এ এক্সিকিউটেবলগুলিতে সিমলিঙ্কগুলি রাখুন
তবুও অন্য একজন ব্যবহারকারী

2
দয়া করে আপডেট করা উত্তর (ব্যবহার করে systemd) গ্রহণ করার বিষয়টি বিবেচনা করুন যাতে লোকেরা এটি শীর্ষে দেখতে পারে।
জোনাথন ওয়াই।

উত্তর:


18

লগআউট করার পরে একটি স্ক্রিপ্ট কার্যকর করতে:

নিম্নলিখিত লাইন যুক্ত করুন:

session-cleanup-script=/path/to/script

মধ্যে /etc/lightdm/lightdm.confফাইল।

এই পরিবর্তনটি কার্যকর হওয়ার জন্য আপনাকে লাইটডিএম পুনরায় চালু করতে হবে। ব্যবহার tty1 এই চলতে চলতে কাজের জন্য Ctrl+ + Alt+ + F1, আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড দিয়ে লগইন এবং নিম্নলিখিত কমান্ডটি প্রয়োগ করুন:

sudo service lightdm restart

নোট: ব্যবহার Ctrl+ + Alt+ + F7স্যুইচ করার গ্রাফিকাল সেশনের

পুনরায় বুট করার পরে একটি স্ক্রিপ্ট কার্যকর করতে:

  1. আপনার স্ক্রিপ্টটি ভিতরে রাখুন /etc/rc0.d
  2. এটি সম্পাদনযোগ্য করুন: sudo chmod +x K99_script
  3. নোট:
    • এই ডিরেক্টরিতে স্ক্রিপ্টগুলি বর্ণানুক্রমিক ক্রমে কার্যকর করা হয়।
    • আপনার স্ক্রিপ্টের নামটি K99সঠিক সময়ে চলতে শুরু করা উচিত ।

শাটডাউনে একটি স্ক্রিপ্ট কার্যকর করতে:

  1. আপনার স্ক্রিপ্টটি ভিতরে রাখুন /etc/rc6.d
  2. এটি সম্পাদনযোগ্য করুন: sudo chmod +x K99_script
  3. নোট:
    • এই ডিরেক্টরিতে স্ক্রিপ্টগুলি বর্ণানুক্রমিক ক্রমে কার্যকর করা হয়।
    • আপনার স্ক্রিপ্টের নামটি K99সঠিক সময়ে চলতে শুরু করা উচিত ।

সূত্র:


4
'কিল' এবং 'স্টার্ট' এর জন্য শুরু হওয়া স্ক্রিপ্টগুলির নামকরণ করা এটি প্রচলিতKS
কিরি

যদি স্ক্রিপ্টে সুডোর সুবিধাগুলি প্রয়োজন হয়? আমি যতদূর বলতে পারি, /etc/rc6.d স্ক্রিপ্টগুলি ব্যবহারকারী হিসাবে চালিত হয় এবং gksudo ব্যবহার করতে পারে না।
hiরহীসিদুর

1
14.04 নিয়ে আমার পক্ষে কাজ করে না, কোনও পরিবর্তন বা অনির্ধারিত গুরুত্বপূর্ণ সত্যটি কি আছে?
tomasb

2
K99 পরামর্শ শাটডাউন / রিবুট করার জন্য ভাল নয় যদি আপনি কিছু ডেটা সংরক্ষণ করতে চান কারণ এটি ঘটে থাকে এবং আন-মাউন্টের পরে স্ক্রিপ্ট অক্ষম করতে কে ব্যবহার করা হয় (দেখুন /etc/rcS.d/README দেখুন), আরম্ভের জন্য এস ব্যবহার করুন এবং এটি আনমাউন্টগুলির আগে রাখুন, মাউন্ট পরে আপনার স্ক্রিপ্ট বুটআপ রাখার জন্য, এটি আটকে গেল কারণ এই ভুল
তথ্যটি

6
এটি খুব ভুল: i) স্ক্রিপ্টের নামগুলি Kরানলেভেল 0, 1 এবং 6 এবং Sরানলেভেল 2, 3, 4 এবং 5 এর জন্য শুরু করা উচিত; ii) আপনাকে স্ক্রিপ্টটি কল করার দরকার নেইK99_foo , সংখ্যাটি কেবল স্ক্রিপ্টগুলি সঞ্চালনের ক্রমটি নির্ধারণ করে। আপনি এটি শেষের দিকে চালিত করতে চান যদি আপনি অন্যদের চেয়ে বৃহত একটি চয়ন করতে হবে; iii) রানলেভেল 0 পুনরায় বুটের জন্য নয়! ; এটা শাটডাউন এর জন্য। 6 রিবুট জন্য। iv) স্ক্রিপ্টগুলির /etc/rcN.dডিরেক্টরিতে কোনও ব্যবসা নেই । পরিবর্তে তাদের সাথে থাকা /etc/init.dএবং লিঙ্ক করা উচিত /etc/rcN.d
টেরডন

14

সিস্টেমড দিয়ে এটি কীভাবে করবেন

আপনি যদি জুন 2016 এর পরে এই থ্রেডটি খুঁজে পান তবে উবুন্টু এবং মিন্ট সহ এর ডেরিভেটিভগুলি সিস্টেম আরম্ভ এবং শাটডাউন নিয়ন্ত্রণ করতে সিস্টেমড ব্যবহার করবে। পুরানো পদ্ধতির সাথে আমার সমস্যা ছিল তাই সিস্টেমেড পদ্ধতিতে গবেষণা করা।

সিস্টেমডের সাহায্যে আপনি নীচের টেমপ্লেটগুলি ব্যবহার করে আপনার স্ক্রিপ্টগুলিতে কল করতে একটি বা দুটি ফাইল তৈরি করেন এবং একটি আদেশ কার্যকর করেন। সহজ।


জিইউআই সংস্করণ

প্রথমে আপনি যে স্ক্রিপ্টগুলি প্রারম্ভকালে এবং / অথবা শাটডাউনে চালাতে চান তা তৈরি করুন। আমি .scopening_atstart এবং .scfullcopy_atend তৈরি করেছি।

তারপরে নিশ্চিত হয়ে নিন যে ফাইলগুলি ডান ক্লিক করে, বৈশিষ্ট্যগুলি নির্বাচন করে এবং নিশ্চিত হয়ে গেছে যে অনুমতিগুলির অধীনে, আপনি একটি প্রোগ্রাম হিসাবে ফাইলের নির্বাহের মঞ্জুরিকে টিক দিয়েছেন।

আমি যে দুটি ফাইল তৈরি করেছি তা একটি র‌্যামডিস্কের বিষয়বস্তু পপুলেশন এবং সংরক্ষণ করে। তারা পরিষেবাটি কাজ করছে তা প্রমাণ করার জন্য আমার হোম ডিরেক্টরিতে একটি ফাইলও তৈরি করে। তারা ফর্ম ছিল:

#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time

তারপরে আমি আমার ফাইল ম্যানেজারটিকে রুট হিসাবে খুললাম /etc/systemd/systemএবং একটি ফাইল স্টার্টআপ.সার্ভিস এবং একটি ফাইল সেভ-রমডিস্ক.সার্ভিস খুললাম এবং তৈরি করেছি। স্পষ্টতই আপনি নিজের নাম এবং জেনেরিক নাম চয়ন করতে পারেন johns_start.service নামে একটি স্টার্টআপ ফাইল এবং johns_shutdown.service নামে একটি শাটডাউন ফাইল অন্তর্ভুক্ত থাকতে পারে। কেবল বিদ্যমান পরিষেবার নাম বাছাই করবেন না।

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart

[Install]
WantedBy=multi-user.target

এবং

[Unit]
Description=Save Ramdisk to Wine drive C

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend

[Install]
WantedBy=multi-user.target

আমার জন্য আপনার এক্সিকিউটেবল স্ক্রিপ্টের পুরো পথটি প্রতিস্থাপন করে আপনি একই পরিষেবা ফাইলগুলি ব্যবহার করতে পারেন।

অবশেষে প্রত্যেকের জন্য কমান্ড প্রয়োগ করুন systemctl আপনার_ফায়াল_নাম সক্ষম করুন (তবে প্রত্যয় পরিষেবা ছাড়াই)। আমার প্রথম ছিলsystemctl enable startup

পরিষেবাগুলি শুরু করার জন্য কম্পিউটারটি পুনরায় বুট করুন। মাল্টি-ইউজার টার্গেটটি যখন প্রস্থানিত হবে তখন সিস্টেমডিটি মাল্টি-ব্যবহারকারীর টার্গেটে প্রবেশ করবে এবং স্টপ পরিষেবাটি কার্যকর করা হবে। বিভিন্ন অ্যাক্টিভেশন শর্ত সহ বিকল্প পরিষেবা ফাইলগুলি নীচে বর্ণিত হবে।


সি এল এল (কমান্ড লাইন) সংস্করণ

এই বিবরণটি ধরে নেওয়া হয় যে আপনি / হোম / জনের পরিবর্তে আপনার হোম ডিরেক্টরি থেকে পরিচালনা করেন, প্রয়োজন অনুযায়ী sudo ব্যবহার করুন এবং আপনার সম্পাদকের পছন্দ যেখানে আমি vim বা svim লিখি।

তৈরি করুন প্রথম লাইন দিয়ে আরম্ভ এবং বন্ধ শেল স্ক্রিপ্ট #!/bin/shএবং তাদের এক্সিকিউটেবল করা ব্যবহার করে chmod +x my_new_filename

উপরের মতো দুটি ফাইল তৈরি করুন , বা এই উদাহরণস্বরূপ, স্টার্টআপ এবং শাটডাউন কার্যগুলি পরিচালনা করতে একটি ফাইল। আমি আমার হোম ডিরেক্টরিতে স্ক্রিপ্টগুলি সম্পাদন করব তবে @ ডন_ক্রিসটি স্ট্যাক এক্সচেঞ্জে কিছু বিকল্প দেখিয়েছে।

svim /etc/systemd/system/start_and_stop.service

এবং ফাইলের সামগ্রীটিতে অনুলিপি করুন:

[Unit]
Description=Run Scripts at Start and Stop

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands  #your paths and filenames
ExecStop=/home/john/.shutdown_commands

[Install]
WantedBy=multi-user.target

তারপরে পরিষেবাটি কমান্ড সহ সক্ষম করুন :

systemctl enable start_and_stop

এবং আপনার সিস্টেমটি পুনরায় বুট করুন যার পরে পরিষেবাগুলি সক্রিয় থাকবে। আদেশগুলি systemctl is-enabled start_and_stopএবং systemctl is-active start_and_stopআপনার নতুন পরিষেবাদি পর্যবেক্ষণে ব্যবহার করা যেতে পারে।


শাটডাউন করার জন্য ট্রিগার শর্তগুলি পরিবর্তন করা

উপরের ফাইলগুলি স্ক্রিপ্টগুলি চালনার জন্য একাধিক-ব্যবহারকারী পরিবেশের উন্মুক্ত বা ঘনিষ্ঠ ব্যবহার করে। নীচের ফাইলটি এর স্ক্রিপ্টগুলি শুরু করতে চারটি সম্ভাব্য শাটডাউন প্রক্রিয়া শুরু করে। পূর্ববর্তী লাইনে + ওয়ান্টডবাই লাইনটিতে লক্ষ্যগুলি যুক্ত করা বা অপসারণ আপনাকে সূক্ষ্ম পার্থক্য করতে দেয়:

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

আবার, স্ক্রিপ্টটি সম্পাদনা করুন /etc/systemd/service/এবং এটি ব্যবহার করে সক্ষম করুন systemctl enable your_file_name। আমি যখন লক্ষ্যগুলি পরিবর্তন করেছি তখন আমি systemclt disable file_nameকমান্ডটি ব্যবহার করেছি এবং তারপরে এটি সক্ষম করে যা এটি লক্ষ্য ডিরেক্টরিতে সংযুক্ত করে। রিবুট করুন এবং পরিষেবাটি পরিচালনা করবে।

[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
#   executed before the target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
ExecStart=/home/john/.my_script  #your path and filename

[Install]
WantedBy=halt.target reboot.target shutdown.target

1
যদিও আপনার পোস্টটি সঠিক, আমি কীভাবে সিস্টেমগুলির সাথে এই ধাপগুলি করা যেতে পারে তার উদাহরণ যোগ করে এটির উন্নতি করার পরামর্শ দেব। আপনি পোস্ট করার পরে একবার আমাকে জানান। ধন্যবাদ এবং AskUbuntu স্বাগত
Sergiy Kolodyazhnyy

হাই সার্জ, আপনি কি লিঙ্কযুক্ত পোস্টে যেমন উদাহরণগুলি বোঝাতে চান বা আপনার মনে অন্য কিছু আছে? দ্বিতীয়ত, আমি নিশ্চিত না যে কীভাবে "আপনাকে জানাতে হবে" যেহেতু আমি অন্য এসও ব্যবহারকারীর সাথে যোগাযোগের জন্য কোনও ব্যবস্থা খুঁজে পাই না।
জন 9631

হ্যাঁ, আপনি আপনার অন্যান্য পোস্টের মতো উদাহরণ সরবরাহ করতে পারেন। কেবল "অন্যান্য লিঙ্কে যান" বললে খুব ভাল হয় না এবং আপনার উত্তরটি অলস দেখায়। এছাড়াও অন্য তাই ব্যবহারকারী ব্যবহার @ ব্যবহারকারী নাম আগে উদাহরণস্বরূপ @Serg জন্য যোগাযোগ, জন্য
Sergiy Kolodyazhnyy

অনেক উন্নতি হয়েছে। খুব ভাল, ভাল কাজ চালিয়ে যান!
সের্গেই কোলোডিয়াজনি

1
অনুযায়ী man systemd.unitব্যবহারকারী তৈরি ফাইলে স্থাপন করা যেতে পারে $XDG_CONFIG_HOME/systemd/userএবং অন্যান্য স্থানীয় ব্যবহারকারীর অবস্থানগুলিকে
Antonios Hadjigeorgalis
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.