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


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


456
2017-08-04 19:54


উত্স


যদি কেউ কখন এবং উভয় দুর্দান্ত দেখায় যেখানে এটি প্রদর্শন করতে পারে। আমি এটা বলছি কারণ আমি জানি যে স্ক্রিপ্টটি শুরু করার অন্তত 2 টি উপায় রয়েছে যা অন্যান্য অ্যাপ্লিকেশনগুলি শুরু হওয়ার আগেই আগুন লাগবে (যেমন X11) - Buttink
এই সম্পূর্ণ উত্তর থ্রেড একটি জগাখিচুড়ি হয়। স্ট্যাক এক্সচেঞ্জ বিন্যাস এই প্রশ্নের জন্য উপযুক্ত উপযুক্ত বলে মনে হচ্ছে না - Gabriel Fair
এটা আসলে বেশ বিনোদনের। কিভাবে বিভিন্ন উপায় হতে পারে? - devios1


উত্তর:


আপনি যে ধরনের স্ক্রিপ্ট চালাতে হবে তার উপর নির্ভর করে .. পরিষেবাগুলির জন্য এবং আপনার যেমন ব্যবহার করা উচিত ভুঁইফোঁড়। কিন্তু একটি ব্যবহারকারী স্ক্রিপ্টের জন্য এটি gnome দ্বারা সেশন স্ক্রিপ্ট হিসাবে চালু করা উচিত! সিস্টেম> পছন্দসই> স্টার্টআপ অ্যাপ্লিকেশনগুলির অধীনে একটি নজর রাখুন।

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

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

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

start on startup
task
exec /path/to/command

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


191
2017-08-04 23:26



কিভাবে SO এবং StackExchange রান বিবেচনা করে, আপনি একটি আপস্টার্ট স্ক্রিপ্টের একটি উদাহরণ দিতে পারেন এবং এটি কোথায় স্থাপন করা হবে? যে এটি একটি অনেক ভাল উত্তর করতে হবে। আপনার লিঙ্কে বলা হয়েছে যে এটি রক্ষণাবেক্ষণ করা হচ্ছে না এবং আপস্টার্ট কুকবুকটি দেখতে, যা অতিমাত্রায়। আমি শুরু করতে যেখানে একটি ধারণা খুব বেশী নেই। - Ehtesh Choudhury
যদি আমাকে রুট হিসাবে কমান্ড চালাতে হয়? - dopatraman
@ দপরাট্রামান উত্তরটি দিয়ে বলেছেন যে এর সাথে সমস্ত প্রক্রিয়া রুট হিসাবে চালানো হয়। - cybermonkey
আপগ্রেড (উবুন্টু 15.04+) এর পরিবর্তে systemd চলমান সিস্টেমে কী করা উচিত তা ব্যাখ্যা করতে এই উত্তরটি আপডেট করুন।
এই উত্তর আমার জ্ঞান না। তালিকাভুক্ত অ্যাপ্লিকেশন system->pref->startup applications পাওয়া যাবে না /etc/init/ না ~/.config/upstart। সুতরাং স্টার্টআপ অ্যাপ্লিকেশন কোথায় সংজ্ঞায়িত করা হয়? - Blauhirn


একটি পদ্ধতি একটি @reboot যোগ করা হয় ক্রন টাস্ক:

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

    @reboot /path/to/script
    

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


476
2017-08-04 19:57



দ্য @reboot এটি ব্যাপকভাবে পরিচিত না কারণ শব্দ একটি চমৎকার টিপ। - jathanism
খুশী হলাম। কোন ধারণা ঠিক যখন এই ট্রিগার? - Oli♦
তাই ... যদি আমি ক্ষমতা হারিয়ে ফেলি এবং পাওয়ার পুনরুদ্ধার হলে পিসি আবার চালু হয়? - Mike Wills
@siamii: man 5 crontab ঐটা বলছি @reboot প্রারম্ভে মৃত্যুদন্ড কার্যকর করা হয় (যখন ক্রন ডিমন শুরু হয়)। - jfs
এটা সত্যিই দারুন. এ পর্যন্ত এই চেয়ে ভাল মনে হয় rc.local যেহেতু সিস্টেম এই বিন্দু দ্বারা আরও সেটআপ মনে হয় (PATH, ইত্যাদি)। এটা অদ্ভুত যে এটা কিছু কল করা কঠিন পরে সিস্টেম প্রারম্ভ - Karthik T


কিভাবে কমান্ড যোগ সম্পর্কে /etc/rc.local? এই ফাইলটি সম্পাদনা করার জন্য আপনাকে সুডো অ্যাক্সেস ব্যবহার করতে হবে।

sudo nano /etc/rc.local

135
2017-08-05 16:40



এটি সর্বাধিক সরাসরি প্রশ্নের উত্তর দেয়: আপনার সিস্টেম বুট করার সময় কীভাবে কেবল কিছু স্ক্রিপ্ট চালানো যায়। upstart আরো জটিল কাজ করে: ডেমো প্রসেস আরম্ভ করে। - Dogweather
তাই /etc/rc.local ব্যাশ স্ক্রিপ্ট আরম্ভ করার সময় আপস্টার্ট ডিমন প্রসেস আরম্ভ করে? - Donato
এই গ্রহণযোগ্য উত্তর হতে হবে ... - Android Dev
ইহা উচিত? এই আর এই দিন কাজ করে না, অধিকার? - DaVince
উবুন্টু 17.04 systemd দিয়ে কাজ করবেন ড - qodeninja


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

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

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

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

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

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


68
2017-08-05 14:02



3) "এটি প্রায় একই উদ্দেশ্য এবং .gnomerc স্ক্রিপ্টের সুযোগ" ছাড়া .gnomerc দৃশ্যত রান আগে একতা লোড হচ্ছে, এবং Startup Applications দৃশ্যত রান পরে একতা লোড হচ্ছে। আমি ইউনিটি এর মেনু বারে বসে যে একটি প্রোগ্রাম চালাতে হয়েছিল এবং এটি এই ক্ষেত্রে একটি বিশাল পার্থক্য তৈরি! - That Brazilian Guy
@ রুডাআলমিদা যে ইঙ্গিত করার জন্য ধন্যবাদ। উত্তর প্রাক ইউনিটি দিনের মধ্যে লেখা হয়েছিল। - Riccardo Murri
sudo update-rc.d myscript.sh defaults, যেখানে /etc/init.d/myscript.sh আপনার স্ক্রিপ্ট হয়, এটি প্রারম্ভে এটি চালায়। - Dan Dascalescu


15.04 এবং পরবর্তীতে:

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

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

তারপর চালান:

sudo systemctl daemon-reload
sudo systemctl enable foo.service

মূলত, এই মাত্র রূপান্তর করা হয় একটি আদর্শ আপstart কাজ একটি systemd এক (দেখুন Upstart ব্যবহারকারীদের জন্য systemd)।

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

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

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

প্রাসঙ্গিক:


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

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

1দীর্ঘমেয়াদী daemons বিরোধিতা হিসাবে।


53
2018-01-09 19:21



চাকরিতে অগ্রাধিকার নির্ধারণ করা কি সম্ভব? অথবা এটি প্রথম চালু করা অন্য সেবা উপর নির্ভর করে যে নির্দিষ্ট? - r3wt
@ r3wt হ্যাঁ, এটি করার বিভিন্ন উপায় আছে। দ্য WantedBy এখানে ব্যবহৃত, উদাহরণস্বরূপ, যখন এটি শুরু করে তোলে multi-user.target উপনিত. তুমি ব্যবহার করতে পার Before, After, Requires, ইত্যাদি দেখুন man systemd.unit - muru
@ পারলডাক একমাত্র জিনিস যার অভাব ছিল। ধন্যবাদ! - muru
আপনাকে স্বাগতম. - বিটিউ, দী RemainAfterExit আপনি শুরু সেবা এবং তার পছন্দসই আচরণ উপর নির্ভর করে। এই ক্ষেত্রে, /bin/df -h <s> হবে </ s> থাকা উচিত RemainAfterExit=no। - PerlDuck
@ পারলডাক ইন নিরপেক্ষ কিছুই নেই df যে প্রয়োজন RemainAfterExit=no। যতক্ষণ না আপনি চালানোর সময় প্রতিটি বার কমান্ডটি চালাতে চান systemctl start foo। - muru


$HOME/.config/autostart
  • এই অবস্থান স্টার্টআপ অ্যাপ্লিকেশন তালিকা রয়েছে।
  • .desktop ফাইল এখানে স্থাপন করা যেতে পারে যা প্রারম্ভে মৃত্যুদন্ড কার্যকর করা হবে।

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

নিম্নলিখিত নির্বাণ .desktop ফাইল $HOME/.config/autostart এবং দেওয়া chmod +x:

[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script

এখানে "</path/to/script>" আপনার পথ প্রতিস্থাপিত হয় script.sh
(সাধারণত সুপারিশ করা হয় /usr/local/bin তাই - যে সরাসরি কমান্ড দ্বারা নির্বাহ করা যেতে পারে myscript সঙ্গে প্রতিস্থাপিত "</path/to/script>")।

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

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

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

অতএব, আপনি প্রারম্ভে আপনার পছন্দসই শেল স্ক্রিপ্ট চালাতে পারেন!


22
2017-07-20 06:14





সহজ জিনিসগুলির জন্য আপনি একটি কমান্ড যোগ করতে পারেন সিস্টেম-> Preferences-> দায়রা আপনার স্ক্রিপ্ট অবস্থান নির্দেশ।

অন্যথায় আপনি এটি /etc/init.d/rc.local এ যুক্ত করতে পারেন অথবা একটি তৈরি করতে পারেন ভুঁইফোঁড় এটি আরো একটি কাজ যদি নিম্ন স্তরের স্টাফ।

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


18
2017-08-04 19:59





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


5
2017-08-04 19:58





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

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

কখন cron চালানো?

মন্তব্য কেউ জিজ্ঞাসা "তারা রান যখন?"। আপনি syslog / journalctl বলতে পারেন:

$ journalctl -b | grep cron
Jan 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-02
Jan 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 root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 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.d
total 44
drwxr-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/sh
PATH=/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-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"`uname -r`

3
2018-01-03 01:02



Cronjobs যোগ করার বিভিন্ন উপায় আছে, কিন্তু অত্যন্ত ভোট দেওয়া উত্তর কোর এবং আপনার উত্তর এখনও @reboot। - muru
Crontabs যোগ করার জন্য বিকল্প পদ্ধতি পোস্ট করা উচিত askubuntu.com/q/2368/158442, ক্রন কাজ যোগ করার বিষয়ে স্পষ্টভাবে যা। - muru
আমি ভিন্ন হতে চাই। প্রশ্নের উত্তর মূল ব্যবহার করে crontab -e কোনটি কালো শিল্পগুলির একটি ভিম-মত ইন্টারফেসের কারণে বিবেচনা করে। অন্যদিকে এই উত্তরটি তাদের মনের জন্য নির্দিষ্ট হতে পারে যাদের মস্তিষ্কে একটি নির্দিষ্ট উপায় রয়েছে। আমরা একই ছাঁচ থেকে সব নিক্ষেপ করা হয় না। তারপরে আবার এই উত্তরটি একের পর এক ভোট পেয়েছে তাই আমরা গণতন্ত্রকে তার কোর্স নিতে দেব। - WinEunuuchs2Unix
অনুগ্রহকরে. আপনি এবং আমি উভয় জানি যে সম্পাদক পরিবর্তন করা যেতে পারে। - muru
@ মুরু হ্যাঁ হ্যাঁ কারণ আপনি আমাকে শিখিয়েছেন এবং আমি এ্যানো পরিবর্তন করতে শিখেছি যেমন ন্যানো বা অন্য কয়েকটি সিএলআই এর। কিন্তু আমি জিডিট ক্যাম্পে আছি। ব্যতীত crontab -e কয়েক মিনিটের, ঘন্টা, ইত্যাদি জন্য তারকাচিহ্ন ("*") স্মৃতিগুলি তুলে ধরেছে যা আমি সর্বদা খুঁজে পেয়েছি আমার জন্য Google নির্দেশাবলীর প্রয়োজন। আমি এখনও ব্যবহার করে খুঁজে /etc/cron.d এবং /etc/cron.daily আমার পছন্দ যেতে। বিশেষ করে এটি আয়না থেকে /etc/udev/rules.d এবং /etc/systemd/system-sleep পদ্ধতি। এটা শুধু একটি সুন্দর ফিট মত মনে হয়। - WinEunuuchs2Unix