Ubuntu başladığında scriptleri nasıl çalıştırabilirim otomatik olarak bu yüzden başlangıçtan sonra onları manuel olarak çalıştırmak zorunda kalmayacağım?
Ne tür komut dosyalarını çalıştırmanız gerektiğine bağlı olarak .. Servisler ve benzeri şeyler için pstart kullanmanız gerekir. Ancak bir kullanıcı betiği için bunlar gnome tarafından oturum betiği olarak başlatılmalıdır! Sistem> Tercihler> Başlangıç Uygulamaları bölümüne bakın.
Yan bir notta, terminal girişinde çalıştırılacak bazı komut dosyalarına ihtiyacınız varsa, bunları giriş dizininizdeki . Bash_login dosyasına ekleyebilirsiniz.
Basit bir komut (çalışmaya devam etmesi gerekmeyen bir) aşağıdaki gibi bir Upstart işini kullanabilir:
start on startup
task
exec /path/to/command
Bunu .conf
dosyasında /etc/init
(sistem önyüklenirken root olarak çalıştırılması gerekirse) ya da ~/.config/upstart
(kullanıcı ne zaman çalıştırılmaya ihtiyaç duyarsa) içine kaydedin. giriş yapın).
Bir yaklaşım bir @reboot cron görevi eklemektir:
crontab -e
öğesinin çalıştırılması, kronunuzu düzenlemenizi sağlar.Buna böyle bir satır eklemek:
@reboot /path/to/script
bilgisayarınız başlatıldığında o betiği çalıştıracaktır.
Komutu /etc/rc.local
'a eklemeye ne dersiniz? Bu dosyayı düzenlemek için Sudo erişimi kullanmanız gerekecek.
Sudo nano /etc/rc.local
Çalıştırmak için (kısa ömürlü)1 systemd
komutunu kullanarak başlangıçta komut, OneShot
türünde bir systemd birimi kullanabilirsiniz. Örneğin, şunları 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
O zaman koş:
Sudo systemctl daemon-reload
Sudo systemctl enable foo.service
Temel olarak, bu sadece tipik bir Upstart işi sistemli olana dönüştürüyor (bakınız pstart kullanıcıları için Systemd ).
Birden fazla ExecStart
satırı kullanarak aynı hizmet dosyasından birden fazla 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, gerisi çalışmaz. Yolun önündeki bir -
, sisteme sıfır olmayan bir çıkış durumunu yok saymasını söyler (bir hata olarak düşünmek yerine).
İlgili:
Kullanıcı oturumları için systemd birimini ~/.config/systemd
içinde oluşturabilirsiniz. Bu daha sonra 16.04 ile çalışmalıdır, ancak daha önce Ubuntu'nun systemd ile yayınlanmaması gerekir (çünkü kullanıcı oturumları için hala Upstart kullanıyordu). Kullanıcı oturum birimleri, sistem servislerinde olduğu gibi aynı komutlarla kontrol edilebilir, ancak --user
seçeneği eklendi:
systemctl --user daemon-reload
systemctl --user status foo.service
Upstart'tan farklı olarak, systemd Exec*
komutlarını bir Kabuk aracılığıyla çalıştırmaz. Bazı sınırlı değişken genişleme ve çoklu komut (;
ile ayrılmış) kendisi gerçekleştirir, ancak bu, Shell benzeri sözdizimine gelince budur. Daha karmaşık bir şey için, yönlendirme veya borular söyleyin, komutunuzu sh -c '...'
veya bash -c '...'
içine kaydırın.
1Uzun ömürlü iblislerin aksine.
Komutları otomatik olarak çalıştırmanın farklı yolları vardır:
pstart sistemi, /etc/init
dizininde bir yapılandırma bulduğu tüm betikleri çalıştırır. Bu komut dosyaları, sistemin başlatılması sırasında (veya belirli bir olaya, örneğin bir kapatma isteğine yanıt olarak) yanıt verir ve kullanıcıyla etkileşime girmeyen komutları çalıştıracak yerlerdir; tüm sunucular bu mekanizmayı kullanmaya başlar.
Okunabilir bir girişi şu adreste bulabilirsiniz: http://upstart.ubuntu.com/getting-started.html man sayfaları man 5 init
ve man 8 init
size tam bilgileri verir .
Ana dizininizdeki .gnomerc
adlı bir Shell betiği, bir GNOME oturumuna her giriş yaptığınızda otomatik olarak kaynaklanır. İsteğe bağlı komutları oraya 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ülecektir.
Oturumun .gnomerc
betiği bitinceye kadar başlamadığını unutmayın; bu nedenle, uzun süre çalışan bazı programları otomatik olarak başlatmak istiyorsanız, çalışan Shell'den programı kaldırmak için, program çağrısına &
eklemeniz gerekir.
Menü seçeneği Sistem -> Tercihler -> Başlangıç Uygulamaları , grafiksel oturumunuz başladığında hangi uygulamaların başlatılacağını tanımlamanıza izin verir (Ubuntu, bazılarını önceden tanımlamaktadır), ve bunları zevkinize ekleyin veya çıkarın. Bu, sh
sözdizimini bilmeniz gerekmediği sürece .gnomerc
betiğinin hemen hemen aynı amacı ve kapsamına sahiptir (ancak hiçbir sh
programlama yapısını kullanamazsınız).
$HOME/.config/autostart
.desktop
başlangıçta çalıştırılacak olan dosya buraya koyulabilir..desktop
dosyası için örnek örnek:
Aşağıdaki .desktop
dosyasını $HOME/.config/autostart
içine ve chmod +x
olarak belirtin:
[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script
Burada "</path/to/script>"
, script.sh
yolunuzla değiştirilir
(genellikle /usr/local/bin
için önerilir, böylece doğrudan ["</path/to/script>"
] ile değiştirilmiş myscript
komutu ile çalıştırılabilir).
script.sh
örnek örneği:
#!/bin/bash
<commands to be executed>
exit
Sonuç: .desktop
dosyası, $HOME/.config/autostart
tarafından komut dosyasını çalıştıran Exec=
öğesinden başlatılacak
Dolayısıyla, istediğiniz Shell betiğini başlangıçta çalıştırabilirsiniz!
Basit şeyler için System-> Preferences-> Sessions komut dosyanızın konumunu işaret eden bir komut ekleyebilirsiniz.
Alternatif olarak, /etc/init.d/rc.local dosyasına ekleyebilir veya eğer daha fazla ise bir starttart işi yapabilirsiniz low level .
Daha fazla bilgi için https://help.ubuntu.com/community/UbuntuBootupHowto 'a bakınız.
Bunun için pstart kullanmalısınız. Upstart, otomatik olarak başlatılan Ubuntu işlemleri için kullanılır. Eski System-V init.d scriptleri gibi gelişmiş bir çözümdür. Ayrıca betiğinizin başına önkoşullar koymanıza da izin verir (ör. Ağın çalışmasına mı ihtiyacınız var? Vb.)
cron
cevap, en çok oylanandan farklı bir şekilde uygulandıBu cevap hala cron
kullanır, ancak en çok oylanan cevaptan farklı bir yöntem kullanır. Bu Ubuntu 16.04’ten bu yana işe yarıyor ama muhtemelen daha önce de destekleniyor. Sadece 16.04'ten beri bilgisayar başlatıldığında işleri çalıştırmak için cron
kullanmaya başladım.
cron
ne zaman çalışır?Yorumlarda birisi "ne zaman koşarlar?" Diye sordu. Syslog/journalctl 'de 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
size çalışan işlerin durumunu e-postayla gönderebilir ve @reboot
işleri çok erken çalışır, ağ yöneticisi ve komut dosyası içine sleep
komutu koymadığınız sürece e-posta çalışmayacaktır. s).
Komut dosyalarınızı /etc/cron.d
dizinine yerleştirin:
$ 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
Her önyüklemeyi çalıştırmak için kurulumum olan birkaç betik:
$ 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`