چگونه اسکریپت ها را در هنگام راه اندازی اجرا کنیم؟


به جواب پذیرفته شده بروید




چگونه می توانم هنگام شروع اوبونتو ، اسکریپت ها را بطور خودکار اجرا کنم ، بنابراین لازم نیست بعد از راه اندازی آنها را به صورت دستی اجرا کنم؟


540









9 :تعداد پاسخها


بسته به نوع اسکریپت هایی که باید اجرا شوند .. برای خدمات و مواردی از این دست شما باید از بالا استفاده کنید . اما برای یک اسکریپت کاربر اینها باید به عنوان اسکریپت های جلسه توسط gnome راه اندازی شوند! به سیستم> تنظیمات برگزیده> برنامه های راه اندازی نگاه کنید.

در صورت نیاز به برخی از اسکریپت ها برای ورود به سیستم ترمینال ، می توانید آنها را به پرونده .bash_login در فهرست خانه خود اضافه کنید.

برای 14.04 و بالاتر

یک دستور ساده (عملی که لازم نیست در حال اجرا باشد) می تواند از یک کار Upstart مانند استفاده کند:

 start on startup
task
exec /path/to/command
 

این مورد را در یک .conf پرونده ذخیره کنید /etc/init (اگر به سیستم نیاز دارید آن را به عنوان ریشه اجرا کنید) یا در ~/.config/upstart (اگر به سیستم خود نیاز دارید در هنگام ورود به سیستم به عنوان کاربر خود اجرا کنید).


212



یک روش برای اضافه کردن یک کارreboot cron است:

  1. در حال اجرا crontab -e به شما امکان ویرایش اطلاعات را می دهد.
  2. خطی مانند این به آن اضافه می شود:

     @reboot /path/to/script
     

    هنگامی که رایانه شما بوت شد ، آن اسکریپت را اجرا می کنید.


574



می توانید دستورات را به موارد /etc/rc.local زیر اضافه کنید :

 sudo nano /etc/rc.local
 

این دستورات را به عنوان root اجرا می کند.

برای اجرای دستورات به عنوان یک کاربر خاص ، از sudo -i -u ( -i برای اجرای پوسته ورود) نیز استفاده کنید. به عنوان مثال ، برای ایجاد تونل SSH مداوم ، که myhost در پرونده johndoe s ~/.ssh/config وجود دارد:

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

توجه داشته باشید که اگر /etc/rc.local/ خالی بود ، ممکن است وجود نداشته باشد ، بنابراین شما باید یک خط shebang را در بالا اضافه کنید (به عنوان مثال #!/bin/bash ) ، و اطمینان حاصل کنید که پرونده از اجرای آن است:

 sudo chmod +x /etc/rc.local
 

168



برای 15.04 و بعد از آن:

برای اجرای یک دستور (کوتاه مدت) 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
 

در اصل ، این فقط تبدیل یک کار معمولی Upstart به یک سیستم سیستمی است ( برای کاربران Upstart به Systemd مراجعه کنید ).

با استفاده از چندین ExecStart خط می توانید چندین دستور را از همان پرونده خدمات اجرا کنید :

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

دستور باید همیشه با مسیری کامل انجام شود. در صورت عدم موفقیت ، بقیه اجرا نمی شوند. - قبل از مسیر می گوید از systemd به چشم پوشی از یک وضعیت خروج غیر صفر (به جای توجه به آن را یک شکست).

مربوط:


برای جلسات کاربر ، می توانید در ~/.config/systemd عوض واحد systemd را ایجاد کنید . این باید با 16.04 به بعد کار کند ، اما نه نسخه های قبلی اوبونتو با سیستم (از آنجا که هنوز هم برای جلسات کاربر از Upstart استفاده می کردند). واحدهای جلسه کاربر را می توان با همان دستوراتی که با خدمات سیستم کنترل می شود کنترل کرد ، اما با --user گزینه اضافه شده:

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

نحو پوسته

توجه داشته باشید که برخلاف Upstart ، systemd Exec* دستورات را از طریق یک پوسته اجرا نمی کند . این کار چندین گسترش متغیر محدود و دستور چندگانه (جدا شده توسط ; ) خود را انجام می دهد ، اما در مورد آن تا آنجا که نحو مانند پوسته پیش می رود. برای هرچه پیچیده‌تر بگویید ، تغییر مسیر یا لوله را بگویید ، فرمان خود را بپیچید sh -c '...' یا bash -c '...' .


1 بر خلاف دزدان طولانی مدت.


81



روشهای مختلفی برای اجرای خودکار دستورات وجود دارد:

  1. تازه بدوران رسیده سیستم تمام اسکریپت ها که از آن آن را پیدا کرد یک پیکربندی در دایرکتوری اجرا /etc/init . این اسکریپت ها در هنگام راه اندازی سیستم اجرا می شوند (یا در پاسخ به وقایع خاص ، به عنوان مثال ، یک درخواست خاموش شدن) و همچنین محلی برای اجرای دستوراتی هستند که با کاربر تعامل ندارند. همه سرورها با استفاده از این مکانیزم شروع می شوند.

    شما می توانید مقدمه ای برای خواندن در این صفحه پیدا کنید: http://upstart.ubuntu.com/getting-started.html صفحات این مرد man 5 init و man 8 init جزئیات کامل را به شما ارائه می دهیم.

  2. .gnomerc هر بار که وارد یک جلسه GNOME می شوید ، یک اسکریپت پوسته به نام در فهرست خانه شما به طور خودکار تهیه می شود. می توانید دستورات دلخواه را در آنجا قرار دهید. متغیرهای محیطی که در این اسکریپت تنظیم کرده اید توسط هر برنامه ای که در جلسه خود اجرا می کنید مشاهده می شود.

    توجه داشته باشید که جلسه تا .gnomerc پایان فیلمنامه شروع نمی شود . بنابراین ، اگر می خواهید برخی از برنامه های در حال اجرا را مجدداً راه اندازی کنید ، باید برای & برنامه جدا شوید تا آن را از پوسته در حال اجرا جدا کنید.

  3. گزینه منو System -> Preferences -> Startup Applications به شما امکان می دهد با شروع جلسه گرافیکی خود برنامه هایی را که باید شروع شود (Ubuntu کاملاً از پیش تعریف کرده است) تعریف کرده و آنها را به سلیقه خود اضافه یا حذف کنید. این تقریباً همان هدف و دامنه .gnomerc اسکریپت را دارد ، به جز این که نیازی به دانستن sh نحو ندارید (اما هیچکدام نمی توانید از هیچ نوع sh برنامه نویسی استفاده کنید ).


71



 $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=

از این رو ، می توانید اسکریپت پوسته مورد نظر خود را در هنگام راه اندازی اجرا کنید!


27



برای چیزهای ساده می توانید یک دستور در سیستم-> تنظیمات برگزیده-> جلسات با اشاره به مکان اسکریپت خود اضافه کنید.

از طرف دیگر می توانید در صورتی که این یک سطح سطح پایین تر باشد ، آن را به /etc/init.d/rc.local اضافه کنید یا یک کار بالادستی را انجام دهید.

نگاهی به https://help.ubuntu.com/community/UbuntuBootupHowto برای اطلاعات بیشتر


18



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`
 

8



برای این کار باید از upstart استفاده کنید. Upstart برای فرآیندهای اوبونتو که به طور خودکار شروع می شود ، استفاده می شود. این یک راه حل پیشرفته مانند اسکریپت های قدیمی System-V init.d است. همچنین این امکان را به شما می دهد تا برای شروع فیلمنامه خود پیش شرط هایی را وارد کنید (یعنی به اجرای شبکه نیاز دارید؟ و غیره.)


5



انتشارات مرتبط


چگونه می توانم از ابتدا یک فیلمنامه را اجرا کنم؟ [تکثیر]

چگونه اسکریپت ها را هر 5 ثانیه اجرا کنیم؟

چگونه اسکریپت ها را بدون تایپ کردن مسیر کامل اجرا کنیم؟

نحوه اجرای یک اسکریپت بسته به اتصال به اینترنت

چگونه Thunderbird را در شروع کار به حداقل برسانیم؟

چگونه واتس اپ را روی اوبونتو اجرا کنیم؟ [تکثیر]

نحوه اجرای اسکریپت پس از رزومه کاری و بعد از باز کردن قفل صفحه

چگونه می توان Virtualbox را در شبکه های پل و فقط میزبان اجرا کرد؟

چگونه GIMP را روی Ubuntu 16.04 (نصب از flatpak) اجرا کنیم؟

نحوه اجرای Wireshark در اوبونتو 17.10

[startup] سوال برچسب


نحوه لیست تمام بسته های نصب شده

چگونه می توان نسخه های قدیمی هسته را پاک کردم تا منوی بوت را تمیز کنم؟

چگونه می توانم nodeJS خود را به آخرین نسخه بروزرسانی کنم؟

چگونه یک دایرکتوری غیر خالی در ترمینال حذف شود؟

چگونه می توانم وابستگی های برآورده نشده پس از افزودن PPA را برطرف کنم؟

کلیدهای میانبر صفحه کلید و ماوس Unity چیست؟

چکمه رایانه من به صفحه سیاه است ، چه گزینه هایی برای رفع آن دارم؟

چگونه می توان اندازه پرونده یک فایل PDF اسکن شده را کاهش داد؟

چگونه می توان نام همه متغیرها و مقادیر فعلی آنها را لیست کرد؟

چگونه می توان عملکرد کلی سیستم اوبونتو را بهبود بخشید؟