কিভাবে স্টার্ট আপ স্ক্রিপ্ট চালানো?

আমি কিভাবে স্ক্রিপ্ট চালাতে পারি স্বয়ংক্রিয়ভাবে উবুন্টু যখন শুরু হয় তখন আমাকে স্টার্টআপের পরে ম্যানুয়ালি চালাতে হবে না?

একটি পদ্ধতি হ ' ল একটি @রিবুট যুক্ত করা ক্রোন কাজ:

  1. চলমান crontab -e আপনি আপনার শস্যদানা সম্পাদনা করার অনুমতি দেবে.
  2. এটির মতো একটি লাইন যুক্ত করা হচ্ছে:

    @reboot /path/to/script

    আপনার কম্পিউটার বুট আপ একবার যে স্ক্রিপ্ট চালানো হবে.

আপনি চালানোর জন্য প্রয়োজন স্ক্রিপ্ট কি ধরণের উপর নির্ভর করে.. পরিষেবাগুলির জন্য এবং আপনার যেমন ব্যবহার করা উচিত আপস্টার্ট. তবে কোনও ব্যবহারকারী স্ক্রিপ্টের জন্য এগুলি জিনোম দ্বারা সেশন স্ক্রিপ্ট হিসাবে চালু করা উচিত! সিস্টেমের অধীনে একটি চেহারা আছে &জি.টি.; পছন্দসমূহ &জি. টি.; প্রারম্ভ অ্যাপ্লিকেশন.

আপনি টার্মিনাল লগইন চালানো হবে কিছু স্ক্রিপ্ট প্রয়োজন হলে একটি পার্শ্ব নোট উপর আপনি তাদের যোগ করতে পারেন .ব্যাশ_লগিন আপনার হোম ডিরেক্টরির মধ্যে ফাইল.

14.04 এবং পুরোনো জন্য

একটি সাধারণ কমান্ড (যার চলমান থাকার দরকার নেই) এর মতো একটি আপস্টার্ট কাজ ব্যবহার করতে পারে:

start on startuptaskexec /path/to/command

একটি এই সংরক্ষণ করুন .conf ফাইল ইন /etc/init (সিস্টেম বুট আপ যখন আপনি রুট হিসাবে চালানোর জন্য এটি প্রয়োজন হলে), বা ইন ~/.config/upstart (যদি আপনি এটি প্রয়োজনআপনি লগ ইন করার সময় আপনার ব্যবহারকারী হিসাবে চালানোর জন্য).

আপনি কমান্ড যোগ করতে পারেন /etc/rc.local:

sudo nano /etc/rc.local

এটি কমান্ড হিসাবে কার্যকর করে রুট.

নির্দিষ্ট ব্যবহারকারী হিসাবে কমান্ডগুলি কার্যকর করতে, ব্যবহার করুন sudo -i -u (-i লগইন শেল চালানোর জন্য). উদাহরণস্বরূপ, একটি স্থায়ী এসএসএইচ টানেল স্থাপন করতে, যেখানে myhost সংজ্ঞায়িত হয় johndoes ~/.ssh/config ফাইল:

sudo -i -u johndoe autossh -nNT -L 1234:localhost:1234 myhost

মনে রাখবেন যে যদি /etc/rc.local বিদ্যমান ছিল না (16.04 সাল থেকে উবুন্টুতে কেস হিসাবে), আপনাকে একটি যোগ করতে হবে শেবাং লাইন শীর্ষে (যেমন #!/bin/bash), এবং ফাইলটি এক্সিকিউটেবল কিনা তা নিশ্চিত করুন:

sudo chmod a+x /etc/rc.local

15.04 এবং পরে জন্য:

একটি (স্বল্পস্থায়ী) চালানোর জন্য1 ব্যবহার করে স্টার্টআপে কমান্ড systemd, আপনি টাইপ একটি সিস্টেমড ইউনিট ব্যবহার করতে পারেন OneShot. উদাহরণস্বরূপ, তৈরি করুন /etc/systemd/system/foo.service ধারণকারী:

[Unit]Description=Job that runs your user script[Service]ExecStart=/some/commandType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target

তারপর চালান:

sudo systemctl daemon-reloadsudo systemctl enable foo.service

মূলত, এটি কেবল রূপান্তর করছে একটি সাধারণ আপস্টার্ট কাজ একটি সিস্টেমড এক (দেখুন আপস্টার্ট ব্যবহারকারীদের জন্য সিস্টেমডি).

একাধিক ব্যবহার করে আপনি একই পরিষেবা ফাইল থেকে একাধিক কমান্ড চালাতে পারেন ExecStart লাইন:

[Service]ExecStart=/some/commandExecStart=/another/command some argsExecStart=-/a/third/command ignore failure

কমান্ড সবসময় পূর্ণ পথ দিয়ে দেওয়া হবে. কোনো কমান্ড ব্যর্থ হলে, বাকি চালানো হয় না. A - পাথ সিস্টেমডকে অ-শূন্য প্রস্থান স্থিতি উপেক্ষা করার আগে (এটি ব্যর্থতা বিবেচনা করার পরিবর্তে)

প্রাসঙ্গিক:


ব্যবহারকারী সেশনের জন্য, আপনি সিস্টেমড ইউনিট তৈরি করতে পারেন ~/.config/systemd পরিবর্তে. এই অগ্রে 16.04 সঙ্গে কাজ করা উচিত, কিন্তু সিস্টেমডি সঙ্গে উবুন্টু এর আগে রিলিজ (যারা এখনও ব্যবহারকারী সেশন জন্য আপস্টার্ট ব্যবহার যেহেতু). ব্যবহারকারী সেশন ইউনিট সিস্টেম সেবা হিসাবে একই কমান্ড দিয়ে নিয়ন্ত্রণ করা যেতে পারে, কিন্তু সঙ্গে --user অপশন যোগ করা হয়েছে:

systemctl --user daemon-reloadsystemctl --user status foo.service

শেল সিনট্যাক্স

মনে রাখবেন, আপস্টার্টের বিপরীতে, সিস্টেমডি চালায় না Exec* একটি শেল মাধ্যমে কমান্ড. এটি কিছু সীমিত পরিবর্তনশীল সম্প্রসারণ এবং একাধিক কমান্ড সম্পাদন করে (দ্বারা পৃথক ;) নিজেই, কিন্তু যে এটি সম্পর্কে যতটা শেল মত বাক্য গঠন যায়. আরো জটিল কিছু জন্য, পুনঃনির্দেশ বা পাইপ বলুন, আপনার কমান্ড মোড়ানো sh -c '...' অথবা bash -c '...'.


1দীর্ঘদিন ধরে ডেমনের বিপক্ষে

স্বয়ংক্রিয়ভাবে কমান্ড চালানোর বিভিন্ন উপায় রয়েছে:

  1. দ্য আপস্টার্ট সিস্টেম এটি ডিরেক্টরির মধ্যে একটি কনফিগারেশন খুঁজে বের করে, যা থেকে সব স্ক্রিপ্ট চালানো হবে /etc/init. এই স্ক্রিপ্ট সিস্টেম সূচনার সময় চালানো হবে (বা নির্দিষ্ট ঘটনা প্রতিক্রিয়া, যেমন, একটি বন্ধ অনুরোধ) এবং তাই ব্যবহারকারীর সাথে যোগাযোগ না যে কমান্ড চালানোর জায়গা; সব সার্ভার এই প্রক্রিয়া ব্যবহার শুরু হয়.

    আপনি এখানে একটি পাঠযোগ্য ভূমিকা খুঁজে পেতে পারেন: http://upstart.ubuntu.com/getting-started.html ম্যান পেজ man 5 init এবং man 8 init আপনি সম্পূর্ণ বিবরণ দিতে.

  2. একটি শেল স্ক্রিপ্ট নামকরণ করা হয়েছে .gnomerc আপনার হোম ডিরেক্টরি স্বয়ংক্রিয়ভাবে প্রতিটি সময় আপনি একটি গনোম অধিবেশন লগ ইন উত্সাহিত করা হয়. আপনি সেখানে নির্বিচারে কমান্ড লাগাতে পারেন; আপনি এই স্ক্রিপ্ট সেট যে পরিবেশ ভেরিয়েবল আপনি আপনার সময় চালানো যে কোনো প্রোগ্রাম দ্বারা দেখা হবে.

    মনে রাখবেন যে অধিবেশন শুরু না হওয়া পর্যন্ত .gnomerc স্ক্রিপ্ট শেষ; অতএব, আপনি যদি কিছু দীর্ঘ-চলমান প্রোগ্রামটি স্বয়ংক্রিয়ভাবে শুরু করতে চান তবে আপনাকে যুক্ত করতে হবে & প্রোগ্রাম আবাহন, চলমান শেল থেকে এটি বিচ্ছিন্ন করার জন্য.

  3. মেনু বিকল্প সিস্টেম -&জি. টি.; পছন্দসমূহ - & জি. টি.; প্রারম্ভ অ্যাপ্লিকেশন আপনি আপনার গ্রাফিকাল সময় (উবুন্টু বেশ কিছু পূর্বনির্দিষ্ট) শুরু হয় যখন অ্যাপ্লিকেশন শুরু করা উচিত তা নির্ধারণ, এবং যোগ অথবা আপনার স্বাদ থেকে তাদের অপসারণ করতে পারবেন. এই প্রায় একই উদ্দেশ্য এবং সুযোগ আছে .gnomerc স্ক্রিপ্ট, আপনি জানতে হবে না ছাড়া sh সিনট্যাক্স (কিন্তু আপনি কোন ব্যবহার করতে পারেন না sh প্রোগ্রামিং কনস্ট্রাক্ট).

$HOME/.config/autostart সূচনার আবেদন তালিকা রয়েছে. .desktop এই ফোল্ডারে ফাইল প্রারম্ভে মৃত্যুদন্ড কার্যকর করা হবে. এটি এক্সিকিউটেবল অনুমতি প্রয়োজন হতে পারে (chmod +x startup.desktop).

জন্য নমুনা উদাহরণ .desktop ফাইল:

[Desktop Entry]Type=ApplicationExec="</path/to/script>"Hidden=falseNoDisplay=falseX-GNOME-Autostart-enabled=trueName=Startup Script

এখানে "</path/to/script>" আপনার পথ দিয়ে প্রতিস্থাপিত হয় script.shআপনি যদি আপনার স্ক্রিপ্ট রাখেন myscript মধ্যে /usr/local/bin যাতে এটি সরাসরি কমান্ড দ্বারা কার্যকর করা যায়, আপনি লিখতে পারেন myscript পরিবর্তে "</path/to/script>".

নমুনা উদাহরণ myscript.sh:

#!/bin/bash<commands to be executed>exit

ফলাফল:.desktop ফাইল থেকে চালু করা হবে $HOME/.config/autostart যা দ্বারা স্ক্রিপ্ট কার্যকর করে Exec=

সাধারণ জিনিসগুলির জন্য আপনি একটি কমান্ড যুক্ত করতে পারেন >>সিস্টেম-পছন্দসমূহ-সেশন আপনার স্ক্রিপ্ট অবস্থান প্রতি নির্দেশ.

বিকল্পভাবে আপনি এটি যুক্ত করতে পারেন / ইত্যাদি / আইএনআইটি.ডি / আরসিস্থানীয় বা একটি করা আপস্টার্ট কাজ যদি এটি আরও বেশি হয় নিম্ন স্তর স্টাফ.

এক নজরে দেখে নিন https://help.ubuntu.com/community/UbuntuBootupHowto আরও তথ্যের জন্য

cron উত্তর শীর্ষ ভোট থেকে বিভিন্ন বাস্তবায়িত

এই উত্তরটি এখনও ব্যবহার করে cron কিন্তু উপরের ভোট উত্তর চেয়ে ভিন্ন পদ্ধতি ব্যবহার করে. এই উবুন্টু থেকে কাজ করে 16.04 কিন্তু সম্ভবত অনেক শুভস্য সমর্থিত. এটা ঠিক যে আমি ব্যবহার শুরু করেছি cron কাজ চালানোর জন্য যখন কম্পিউটার থেকে বুট আপ 16.04.

কখন করে cron দৌড়াও?

মন্তব্যে কেউ জিজ্ঞাসা করেছেন এবং উদ্ধৃতি; তারা কখন চালায়?& উদ্ধৃতি;. আপনি সিসলগ / জার্নাল টিএল-এ বলতে পারেন:

$ journalctl -b | grep cronJan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)Jan 02 16:54:40 alien CRON[985]: (root) CMD (   /usr/local/bin/cron-reboot-cycle-grub-background)Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root

একটি জিনিস নোট করা হয় cron আপনি কাজ চালানোর অবস্থা ইমেইল করতে পারেন এবং @reboot আপনি একটি করা, যদি না কাজ তাই তাড়াতাড়ি নেটওয়ার্ক ম্যানেজার চালানো এবং ইমেল চলমান করা হবে না sleep আপনার স্ক্রিপ্ট(গুলি) মধ্যে কমান্ড.

আপনার স্ক্রিপ্টগুলি কোথায় রাখবেন

ডিরেক্টরিতে আপনার স্ক্রিপ্ট রাখুন /etc/cron.d:

$ ll /etc/cron.dtotal 44drwxr-xr-x   2 root root  4096 Nov 26 19:53 ./drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../-rw-r--r--   1 root root   244 Dec 28  2014 anacron-rw-r--r--   1 root root   148 Feb 18  2017 cycle-grub-background-rw-r--r--   1 root root   138 Mar  5  2017 display-auto-brightness-rw-r--r--   1 root root   460 Nov 26 19:53 nvidia-hdmi-sound-rw-r--r--   1 root root   102 Feb  9  2013 .placeholder-rw-r--r--   1 root root   224 Nov 19  2016 touch-vmlinuz-rw-r--r--   1 root root   700 Aug  5 11:15 turn-off-hyper-threading

একটি স্ক্রিপ্ট মত চেহারা কি?

এখানে প্রতিটি বুট চালানোর জন্য আমার কয়েকটি স্ক্রিপ্ট সেটআপ রয়েছে:

$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin @reboot   root    /usr/local/bin/cron-reboot-cycle-grub-background$ cat /etc/cron.d/touch-vmlinuzSHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin@reboot   root    touch "/boot/vmlinuz-"`uname -r`

আপনার ব্যবহার করা উচিত আপস্টার্ট এই জন্য. উবুন্টু প্রক্রিয়াগুলির জন্য আপস্টার্ট ব্যবহার করা হয় যা স্বয়ংক্রিয়ভাবে শুরু হয় এটি পুরানো সিস্টেমের মতো একটি বর্ধিত সমাধান-ভি ইনিট.ডি স্ক্রিপ্ট. এটি আপনাকে আপনার স্ক্রিপ্ট শুরুর পূর্বশর্তগুলি রাখার অনুমতি দেয় (অর্থাত্ আপনার কি নেটওয়ার্ক চলমান দরকার? ইত্যাদি)

কার্নেল শুরু হওয়ার ঠিক পরে আপনি যদি সিস্টেমডের আগে আপনার স্ক্রিপ্টটি চালাতে চান তবে আফাইক উপায় যুক্ত করছে init=/path/to/script কার্নেল কমান্ড লাইনে /boot/grub/grub.cfg বা আরও ভবিষ্যতের প্রমাণ আপনার নিজস্ব মেনু এন্ট্রি করুন /etc/grub.d/40_custom থেকে একটি মেনু এন্ট্রি অনুলিপি করে /boot/grub/grub.cfg এবং প্রয়োজনীয় পরিবর্তন করা (এবং চলমান update-grub এর পরে grub আপনার কাস্টম ফাইল যোগ করুন /boot/grub/grub.cfg).

linux   /boot/vmlinuz-5.4.0-26-generic ... ro  quiet splash 

পরিবর্তন করুন

linux   /boot/vmlinuz-5.4.0-26-generic ... ro  quiet splash init=/path/to/script

সঠিকভাবে রাখা যেমন যত্ন নিন #!/bin/bash প্রথম লাইন এবং exec /sbin/init (যদি /sbin/init কার্নেল প্যানিক এড়াতে শেষে) এটা সিস্টেম পয়েন্ট খনি - আপনার সিস্টেমে বিদ্যমান.

কেউ যে সন্ত্রস্ত হবে যখন এবং যেখানে উভয় প্রদর্শন করতে পারে. আমি এটি বলছি কারণ আমি জানি যে স্ক্রিপ্ট শুরু করার কমপক্ষে 2 টি উপায় রয়েছে যা অন্যান্য অ্যাপ্লিকেশন শুরু হওয়ার আগে আগুন ধরবে (এক্স 11 এর মতো)

  • 1 থেকে @গ্যাব্রিয়েলফায়ার সমস্যা একটি বড় অংশ মূল প্রশ্ন ও উত্তর দশ বছর বয়সী হয়. আমি এই সমস্যা সমাধানের জন্য অনেক উপায় আছে যে যোগ চাই. ইউনিক্স দর্শনের সরলতার কী হয়েছিল?! অনুরোধ কেউ বুদ্ধিমান এবং যথেষ্ট পয়েন্ট সঙ্গে এই পোস্ট পুনর্লিখন, বা আধুনিক অপারেটিং সিস্টেম সংস্করণের জন্য একটি নতুন, আপ টু ডেট, নির্ধারক উত্তর যোগ করুন.

এই সম্পূর্ণ উত্তর থ্রেড একটি জগাখিচুড়ি. স্ট্যাক এক্সচেঞ্জ ফর্ম্যাটটি এই প্রশ্নের জন্য সবচেয়ে উপযুক্ত বলে মনে হচ্ছে না