উবুন্টু শুরু হওয়ার সাথে সাথে আমি কীভাবে স্বয়ংক্রিয়ভাবে স্ক্রিপ্টগুলি চালাতে পারি যাতে শুরুর পরে আমাকে সেগুলি নিজে চালাতে হবে না?
উবুন্টু শুরু হওয়ার সাথে সাথে আমি কীভাবে স্বয়ংক্রিয়ভাবে স্ক্রিপ্টগুলি চালাতে পারি যাতে শুরুর পরে আমাকে সেগুলি নিজে চালাতে হবে না?
উত্তর:
আপনার কী ধরণের স্ক্রিপ্টগুলি চালানো দরকার তার উপর নির্ভর করে .. পরিষেবাগুলির জন্য এবং আপনার মতো আপনার আপস্টার্ট ব্যবহার করা উচিত । তবে ব্যবহারকারীর স্ক্রিপ্টের জন্য এগুলি জিনোমে সেশন স্ক্রিপ্ট হিসাবে চালু করা উচিত! সিস্টেম> পছন্দসমূহ> প্রারম্ভিক অ্যাপ্লিকেশনগুলির নীচে একবার দেখুন।
পার্শ্ব নোটে টার্মিনাল লগইনটিতে চালনার জন্য আপনার যদি কিছু স্ক্রিপ্টের প্রয়োজন হয় তবে আপনি সেগুলি আপনার হোম ডিরেক্টরিতে .bash_login ফাইলটিতে যুক্ত করতে পারেন ।
একটি সাধারণ কমান্ড (যার জন্য চলমান থাকার দরকার নেই) একটি আপস্টার্ট কাজটি ব্যবহার করতে পারে যেমন:
start on startup
task
exec /path/to/command
এটিকে একটি .conf
ফাইলে সংরক্ষণ করুন /etc/init
(সিস্টেম বুট করার সময় আপনার যদি এটির হিসাবে রুট হিসাবে চালানো দরকার), বা ইন করুন ~/.config/upstart
(আপনি লগ ইন করার সময় আপনার ব্যবহারকারীর মতো এটি চালানোর প্রয়োজন হলে)।
system->pref->startup applications
তন্ন তন্ন খুঁজে পাওয়া যেতে পারে /etc/init/
কিংবা মধ্যে ~/.config/upstart
। সুতরাং যেখানে স্টার্টআপ অ্যাপ্লিকেশন সংজ্ঞায়িত করা হয়?
একটি পদ্ধতি হ'ল @ রিবুট ক্রোন টাস্ক যুক্ত করুন:
crontab -e
আপনাকে আপনার ক্রোন সম্পাদনা করার অনুমতি দেবে।এটির মতো একটি লাইন যুক্ত করা:
@reboot /path/to/script
আপনার কম্পিউটারটি বুট হয়ে গেলে সেই স্ক্রিপ্টটি কার্যকর করা হবে।
@reboot
শব্দ একটা চমৎকার ডগা কারণ এটি বিপুল পরিচিতি হয়।
man 5 crontab
বলেছেন যে @reboot
এটি স্টার্টআপে কার্যকর করা হয় (যখন ক্রোন ডেমন শুরু করা হয়)।
rc.local
যেহেতু সিস্টেমটি এই পয়েন্ট (প্যাথ, ইত্যাদি) দ্বারা আরও সেটআপ করে। সিস্টেম স্টার্টআপের পরে কিছু কল করা এত কঠিন যে আজব ব্যাপারটি ..
কমান্ড যুক্ত করার বিষয়ে /etc/rc.local
? এই ফাইলটি সম্পাদনা করার জন্য আপনাকে sudo অ্যাক্সেস ব্যবহার করতে হবে।
sudo nano /etc/rc.local
chmod 755 rc.local
এবং #!/bin/bash
প্রথম লাইনে যুক্ত করতে হবে।
স্টার্টআপে একটি (স্বল্প-স্থায়ী) 1 কমান্ড চালানোর জন্য 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
মূলত, এটি কেবলমাত্র একটি সাধারণ আপস্টার্ট কাজকে একটি সিস্টেমডে রূপান্তর করছে ( আপস্টার্ট ব্যবহারকারীদের জন্য সিস্টেমড দেখুন )।
আপনি একই পরিষেবা ফাইল থেকে একাধিক ExecStart
লাইন ব্যবহার করে একাধিক কমান্ড চালাতে পারেন :
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
কমান্ডটি সর্বদা পুরো পথ দিয়ে দিতে হবে। যদি কোনও কমান্ড ব্যর্থ হয়, বাকিটি চালানো হয় না। একটি -
পাথ সামনে (পরিবর্তে এটি একটি ব্যর্থতা বিবেচনা) একটি নন-জিরো প্রস্থান অবস্থা উপেক্ষা করার systemd নির্দেশ দেওয়া হয়।
প্রাসঙ্গিক:
ব্যবহারকারীর সেশনের জন্য, আপনি ~/.config/systemd
পরিবর্তে systemd ইউনিট তৈরি করতে পারেন । এটি 16.04 এর পরে কাজ করবে, তবে উসুন্টু এর আগে প্রকাশিত সিস্টেমেডের সাথে প্রকাশিত হবে না (যেহেতু তারা এখনও ব্যবহারকারীদের সেশনের জন্য আপস্টার্ট ব্যবহার করে)। ব্যবহারকারী সেশন ইউনিটগুলি সিস্টেম পরিষেবাদির মতো একই কমান্ডগুলির সাহায্যে নিয়ন্ত্রণ করা যেতে পারে, তবে --user
বিকল্পটি যুক্ত করে:
systemctl --user daemon-reload
systemctl --user status foo.service
মনে রাখবেন, আপস্টার্টের বিপরীতে, সিস্টেমড Exec*
শেল মাধ্যমে কমান্ডগুলি চালায় না । এটি ;
নিজেই কিছু সীমিত পরিবর্তনশীল সম্প্রসারণ এবং একাধিক কমান্ড (পৃথক করে ) সম্পাদন করে তবে শেল-এর মতো সিনট্যাক্স যতদূর যায় that's কিছু আরও জটিল জন্য, ফেরৎ বা পাইপ বলছি, আপনার কমান্ড মোড়ানো sh -c '...'
বা bash -c '...'
।
1 দীর্ঘস্থায়ী ডেমনগুলির বিপরীতে।
WantedBy
এখানে ব্যবহৃত, উদাহরণস্বরূপ, এটি শুরু যখন তোলে multi-user.target
উপনিত। আপনি ব্যবহার করতে পারেন Before
, After
, Requires
, ইত্যাদি দেখুনman systemd.unit
RemainAfterExit
আপনি যে পরিষেবাটি শুরু করেন তার ও তার পছন্দসই আচরণের উপর নির্ভর করে। উদাহরণস্বরূপ, /bin/df -h
<s> </ s> থাকা উচিত RemainAfterExit=no
।
df
প্রয়োজনের অন্তর্নিহিত কিছু নেই RemainAfterExit=no
। যতক্ষণ না আপনি বারবার চালানোর সময় কমান্ডটি প্রয়োগ করতে চান systemctl start foo
।
কমান্ডগুলি স্বয়ংক্রিয়ভাবে চালনার বিভিন্ন উপায় রয়েছে:
ভুঁইফোড় সিস্টেম থেকে তা ডিরেক্টরির মধ্যে একটি কনফিগারেশন খুঁজে বের করে সব স্ক্রিপ্ট চালানো হবে /etc/init
। এই স্ক্রিপ্টগুলি সিস্টেম শুরুর সময় চলবে (বা নির্দিষ্ট ইভেন্টের প্রতিক্রিয়া হিসাবে, উদাহরণস্বরূপ, একটি শাটডাউন অনুরোধ) এবং তাই কমান্ডগুলি চালনার জায়গা যা ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করে না; সমস্ত সার্ভারগুলি এই প্রক্রিয়াটি ব্যবহার করে শুরু করা হয়েছে।
ম্যান পেজগুলিতে : http://upstart.ubuntu.com/getting-st সূত্র HTTML এ আপনি একটি পঠনযোগ্য ভূমিকা খুঁজে পেতে পারেন man 5 init
এবং man 8 init
আপনাকে সম্পূর্ণ বিবরণ দিন।
.gnomerc
আপনি যখন কোনও জিনোম সেশনে লগইন করেন তখন আপনার হোম ডিরেক্টরিতে নামের একটি শেল স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে উত্স হয়ে যায়। আপনি সেখানে নির্বিচারে আদেশ দিতে পারেন; এই স্ক্রিপ্টটিতে আপনি যে পরিবেশের পরিবর্তনগুলি সেট করেছেন সেটি আপনার সেশনে চালিত কোনও প্রোগ্রামের দ্বারা দেখা যাবে।
নোট করুন যে .gnomerc
স্ক্রিপ্ট শেষ না হওয়া পর্যন্ত সেশনটি শুরু হবে না ; অতএব, যদি আপনি কিছু দীর্ঘ-চলমান প্রোগ্রামটি অটোস্টার্ট করতে চান &
তবে চলমান শেল থেকে পৃথক করার জন্য আপনাকে প্রোগ্রামের অনুরোধটিতে সংযুক্ত করতে হবে।
মেনু অপশন সিস্টেম -> পছন্দসমূহ -> স্টার্টআপ অ্যাপ্লিকেশন আপনাকে গ্রাফিকাল সেশন শুরু হওয়ার সাথে সাথে কী অ্যাপ্লিকেশনগুলি শুরু করা উচিত তা নির্ধারণ করতে দেয় (উবুন্টু বেশ কিছুটা পূর্বনির্ধারিত হয়), এবং সেগুলি আপনার স্বাদে যুক্ত বা সরিয়ে দেয়। এটির প্রায় একই উদ্দেশ্য এবং .gnomerc
স্ক্রিপ্টের স্কোপ রয়েছে , আপনার sh
সিনট্যাক্সটি জানতে হবে না (তবে আপনি কোনও sh
প্রোগ্রামিং কনস্ট্রাক্টও ব্যবহার করতে পারবেন না )।
.gnomerc
সম্ভবত ইউনিটি লোড করার আগেStartup Applications
চালিত হয় এবং দৃশ্যত ইউনিটি লোড করার পরে চলে except আমাকে একটি প্রোগ্রাম চালাতে হয়েছিল যা ইউনিটির মেনু বারে বসে এবং এটি এই ক্ষেত্রে একটি বিশাল পার্থক্য করেছে!
sudo update-rc.d myscript.sh defaults
, যেখানে /etc/init.d/myscript.sh আপনার স্ক্রিপ্ট, এটি শুরুতে এটি চালায়।
$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=
সুতরাং, আপনি আপনার পছন্দসই শেল স্ক্রিপ্ট শুরুতে চালাতে পারেন!
সাধারণ জিনিসের জন্য আপনি সিস্টেম -> পছন্দসমূহ> সেশনগুলিতে আপনার স্ক্রিপ্টের অবস্থান নির্দেশ করে একটি কমান্ড যুক্ত করতে পারেন ।
বিকল্পভাবে আপনি এটিকে /etc/init.d/rc.local এ যুক্ত করতে পারেন বা এটি যদি আরও নিম্ন স্তরের জিনিস থাকে তবে একটি আপস্টার্ট কাজ করতে পারেন।
কটাক্ষপাত https://help.ubuntu.com/community/UbuntuBootupHowto আরও তথ্যের জন্য
cron
উপরে ভোট দেওয়া থেকে পৃথক উত্তর কার্যকর করা হয়েছেএই উত্তরটি এখনও ব্যবহার করে cron
তবে শীর্ষ ভোট দেওয়া উত্তরের চেয়ে আলাদা পদ্ধতি ব্যবহার করে। এটি উবুন্টু 16.04 সাল থেকে কাজ করে তবে সম্ভবত এটি খুব শীঘ্রই সমর্থন করে। cron
১ just.০৪ সাল থেকে কম্পিউটার বুট হয়ে যাওয়ার পরে আমি কাজ চালানোর জন্য ব্যবহার শুরু করেছি ।
cron
চালায়?মন্তব্যে কেউ জিজ্ঞাসা করেছিলেন "তারা কখন চলে?" আপনি সিসলগ / জার্নালটিতে বলতে পারেন:
$ 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`
@reboot
।
crontab -e
যা কিছু ভিএম-এর মতো ইন্টারফেসের কারণে কোনও একটি কালো শিল্পকে বিবেচনা করে। অন্যদিকে এই উত্তরটি তাদের জন্য আবেদন করতে পারে যাদের মস্তিষ্ক নির্দিষ্ট উপায়ে তারযুক্ত। আমরা সবাই একই ছাঁচ থেকে নিক্ষিপ্ত নই। তারপরে আবার এই উত্তরের ইতিমধ্যে একটাই ভোট রয়েছে সুতরাং আমরা গণতন্ত্রকে তার পথ অবলম্বন করতে দেব।
crontab -e
কয়েক মিনিট, ঘন্টা ইত্যাদির জন্য অ্যাসিরিস্টস ("*") এর স্মৃতি উপস্থিত করে যা আমি সর্বদা খুঁজে পেয়েছি যেগুলির জন্য আমার গুগল নির্দেশাবলীর প্রয়োজন। আমি এখনও ব্যবহার করতে /etc/cron.d
এবং /etc/cron.daily
আমার পছন্দ করতে যেতে পাই । বিশেষত যেহেতু এটি আয়না /etc/udev/rules.d
এবং /etc/systemd/system-sleep
পদ্ধতিগুলি। এটা ঠিক একটি সুন্দর ফিট মত মনে হচ্ছে।
আপনি এটির জন্য আপস্টার্ট ব্যবহার করা উচিত । আপস্টার্টটি উবুন্টু প্রক্রিয়াগুলির জন্য ব্যবহৃত হয় যা স্বয়ংক্রিয়ভাবে শুরু হয়। এটি পুরানো সিস্টেম-ভি init.d স্ক্রিপ্টগুলির মতো বর্ধিত সমাধান। এটি আপনাকে আপনার স্ক্রিপ্টের শুরুতে পূর্বশর্তগুলিও রাখার অনুমতি দেয় (অর্থাত আপনার নেটওয়ার্কটি চলমান দরকার কি? ইত্যাদি)