Başlatmada komut dosyaları nasıl çalıştırılır?

455

Ubuntu başlatıldığında otomatik olarak komut dosyalarını nasıl çalıştırabilirim? Bu yüzden, başlangıçtan sonra bunları manuel olarak çalıştırmam gerekmez mi?

    
sordu myusuf3 04.08.2010 21:54

9 cevap

191

Hangi tür komut dosyalarının çalıştırılması gerektiğine bağlı olarak .. Hizmetler ve benzerleri için up-start 'ı kullanmalısınız. Ama bir kullanıcı betiği için bunlar gnome tarafından oturum komutları olarak başlatılmalıdır! Sistem & gt; Tercihler & gt; Başlangıç ​​Uygulamaları.

Bir yan notta terminal girişinde çalıştırılacak bazı betiklere ihtiyacınız varsa bunları . Bash_login ana dizininizde dosya.

14.04 ve üstü için

Basit bir komut (çalışmaya devam etmesi gerekmeyen), aşağıdaki gibi bir Başlatma işini kullanabilir:

start on startup
task
exec /path/to/command

Bunu .conf dosyasında /etc/init dosyasına kaydedin (sistem önyüklendiğinde root olarak çalıştırmaya ihtiyacınız varsa) veya ~/.config/upstart içinde (gerekirse) giriş yaptığınızda kullanıcı olarak çalıştırmak için.)

    
verilen cevap LassePoulsen 05.08.2010 01:26
475

Bir yaklaşım, bir @reboot cron görevini eklemektir:

  1. crontab -e dosyasını çalıştırmak, sizin cronunuzu düzenlemenize izin verecektir.
  2. Bunun gibi bir satır eklemek:

    @reboot /path/to/script
    

    Bilgisayarınız açıldığında bu komut dosyasını çalıştıracaktır.

verilen cevap ceejayoz 04.08.2010 21:57
132

Komutu /etc/rc.local 'ye ekleme hakkında ne dersiniz? Bu dosyayı düzenlemek için sudo erişimi kullanmalısınız.

sudo nano /etc/rc.local
    
verilen cevap paolo granada lim 05.08.2010 18:40
68

Otomatik olarak komutları çalıştırmak için farklı yollar vardır:

  1. upstart sistemi, /etc/init dizininde bir yapılandırma bulduğu tüm komut dosyalarını çalıştırır. Bu komut dosyaları, sistem başlatılırken (veya belirli olaylara yanıt olarak, örneğin bir kapatma isteğinde) çalışacak ve kullanıcıyla etkileşime girmeyen komutları çalıştıracak yer olacaktır; tüm sunucular bu mekanizma kullanılarak başlatıldı.

    Şu adreste okunabilir bir giriş bulabilirsiniz: İşte man 5 init ve man 8 init man sayfaları tüm detaylar.

  2. Ev dizininizde .gnomerc adlı kabuk komut dosyası, GNOME oturumuna her giriş yaptığınızda otomatik olarak kaynaklanır. Orada keyfi komutlar koyabilirsiniz; Bu komut dosyasında ayarladığınız ortam değişkenleri, oturumunuzda çalıştırdığınız herhangi bir program tarafından görülebilir.

    Oturumun .gnomerc komut dosyası bitene kadar başlamadığını unutmayın; Bu nedenle, uzun süredir çalışan bir programın otomatik olarak yeniden başlatılmasını istiyorsanız, çalışan kabuktan çıkarmak için programın çağrısına & eklemeniz gerekir.

  3. Menü seçeneği Sistem - & gt; Tercihler - & gt; Başlangıç ​​Uygulamaları , grafik oturumunuz başladığında hangi uygulamaların başlatılacağını tanımlamanıza olanak tanır (Ubuntu, biraz önceden tanımlanır) ve bunları zevkinize ekleyebilir veya kaldırabilirsiniz. Bu, .gnomerc sözdizimini bilmeniz dışında sh komut dosyasının hemen hemen aynı amacına ve kapsamına sahiptir (ancak sh programlama yapısını kullanamazsınız).

verilen cevap Riccardo Murri 05.08.2010 16:02
53

15.04 ve üstü için:

Başlangıçta sistemd'yi kullanarak bir (kısa ömürlü) 1 komutunu çalıştırmak için, OneShot tipinde bir systemd birimi kullanabilirsiniz. Örneğin, aşağıdakileri içeren /etc/systemd/system/foo.service oluşturun:

[Unit]
Description=Job that runs your user script

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

[Install]
WantedBy=multi-user.target

Çalıştırın:

sudo systemctl daemon-reload
sudo systemctl enable foo.service

Esasen, bu, tipik bir Upstart işini sistemdeyken dönüştürmektir (bkz. Upstart kullanıcıları için sistem durumu ).

Birden çok ExecStart satırı kullanarak aynı hizmet dosyasından birden çok komut çalıştırabilirsiniz:

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

Komut her zaman tam yolla verilmelidir. Herhangi bir komut başarısız olursa, kalanlar çalışmaz. Yoldan önceki - , sistemd'e sıfır olmayan bir çıkış durumunu yok saymasını söyler (bir hata olduğunu düşünmek yerine).

İlgili:

Kullanıcı oturumları için, systemd birimi yerine ~/.config/systemd oluşturabilirsiniz. Bu, 16.04'ten sonra çalışmalı, fakat Uduntu'nun daha önceki sistemd olmayan sürümlerini (kullanıcı oturumları için hala Upstart kullandıkları için) kullanmamalıdır. Kullanıcı oturumu birimleri, sistem hizmetleriyle aynı komutlarla kontrol edilebilir, ancak --user seçeneği eklendi:

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

1 Uzun ömürlü olanların aksine.

    
verilen cevap muru 09.01.2016 20:21
22
$HOME/.config/autostart
  • Bu konum başlangıç ​​uygulama listesini içerir.
  • Başlangıçta çalıştırılacak .desktop dosyası buraya yazılabilir.

.desktop dosyası için örnek örnek:

.desktop dosyasını aşağıdaki% co_de dosyasına koyar ve $HOME/.config/autostart verilir:

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

Burada chmod +x , "</path/to/script>" % öğenize giden yolla değiştirilir (genellikle script.sh 'ye önerilir, böylece doğrudan% komut_adı% /usr/local/bin ile değiştirilir).

Örnek myscript :

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

Sonuç: "</path/to/script>" dosyası, script.sh betiği tarafından çalıştırılan .desktop dosyasından başlatılacak

Bu nedenle, istediğiniz kabuk komut dosyasını başlangıçta çalıştırabilirsiniz!

    
verilen cevap Pandya 20.07.2014 08:14
18

Basit şeyler için komut dosyanızın bulunduğu yeri gösteren Sistem - & gt; Tercihler & gt; Oturumlar seçeneğine bir komut ekleyebilirsiniz.

Alternatif olarak, daha fazlasa, /etc/init.d/rc.local dosyasına ekleyebilir veya upstart işini yapabilirsiniz. < em> düşük seviye malzeme.

Daha fazla bilgi için İşte sayfasına bakın

    
verilen cevap tutuca 04.08.2010 21:59
5

Bunun için upstart kullanmalısınız. Upstart, otomatik olarak başlatılan Ubuntu süreçleri için kullanılır. Eski System-V init.d betikleri gibi geliştirilmiş bir çözümdür. Ayrıca, betiğinizin başlangıcına önkoşullar koymanıza da olanak verir (yani, ağın çalışmasına mı ihtiyacınız var? Vb.)

    
verilen cevap txwikinger 04.08.2010 21:58
3

cron yanıt, en çok oylanandan farklı uygulandı

Bu cevap hala cron kullanıyor, ancak en çok oylanan yanıttan farklı bir yöntem kullanıyor. Bu Ubuntu 16.04'ten beri çalışıyor ama muhtemelen daha çabuk destekleniyor. 16.04'ten beri bilgisayar açıldığında işleri çalıştırmak için cron kullanmaya başladım.

cron ne zaman çalışır?

Yorumlarda birisi "ne zaman koşar?" diye sordu. Syslog / journalctl'da şunu söyleyebilirsiniz:

$ 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

Unutulmaması gereken bir şey cron işlerin durumunu size e-posta ile gönderebilir ve @reboot işleri bu kadar erken çalıştırırsanız, ağ yöneticilerinize sleep komutu koymazsanız, ağ yöneticisi ve e-posta çalışmaz.

Komut dosyalarınızı nereye koyacağınız

Komut dosyalarınızı% co_de dizinine koyun:

$ 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

Bir betik neye benziyor?

İşte, her önyüklemeyi çalıştırmak için kurduğum birkaç komut dosyası:

$ 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'
    
verilen cevap WinEunuuchs2Unix 03.01.2018 02:02

Etiketlerdeki diğer soruları oku