Önyükleme sırasında bir komut dosyası root olarak nasıl çalıştırılır


59

Ağ yöneticimi kullanmadan wifi'mı otomatik olarak etkinleştiren bir komut dosyası kullandım, ancak sistem önyüklenirken komut dosyasını nasıl kök olarak çalıştıracağımı bilmiyorum. Komut dosyasının önyükleme sırasında otomatik olarak çalışmasını nasıl sağlayabilirim?


Otomatik başlatma programları yapılandırılmış autostartmanifestolarına veya *.serviceyanı olduğu gibi, çeşitli konumlarda dosya init.dveya crontab. Şuna
Noam Manos

Yanıtlar:


54

Çalıştırmak istediğiniz komut dosyasını /etc/init.d dizinine yerleştirin ve komut dosyasını çalıştırılabilir duruma getirin.

chmod 755 myscript

Bu yapıldıktan sonra, kullanmak istediğiniz çalışma seviyesi dizininde sembolik bir bağlantı oluşturun; örneğin, bir programın çalışma seviye 2'sinde bir program çalıştırmak istiyorsanız, Ubuntu için varsayılan çalışma düzeyini dizine yerleştirirsiniz /etc/rc2.d. Sadece dizini yerleştiremezsiniz, ne zaman çalışacağını “S” ile göstererek belirtmelisiniz ve yürütme sırası önemlidir. Daha yüksek bir sayı vererek dizindeki her şeyden sonra yerleştirin.

Çalıştırılacak son komut dosyasıysa rc.localve adlandırılmışsa S99rc.local, komut dosyanızı olarak eklemeniz gerekir S99myscript.

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript

Her geriye uyumlu /etc/rc*.ddizinde, dizine sembolik bağlantılar bulunur /etc/init.d/.


1
Ubuntu Sunucusu 14.04 altında kullanmak için gerekli dikkat /etc/rc2.dyerine, rc3.dörnek olarak gösterildiği gibi. Görünüşe rc2.dgöre sadece grafiksel çalışma seviyesi değil.
Brad

1
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.dsizi hangi /etc/rc?.ddizinin varsayılan çalışma seviyenize karşılık geleceğine götürür .
Kevin

1
Bunun yerine: "Çalıştırılacak en son komut dosyasıysa rc.localve adlandırılmışsa S99rc.local, komut dosyanızı olarak eklemeniz gerekir S99myscript." Şunu mu demek istediniz: "Çalıştırılacak son komut dosyasıysa myscriptve adlandırılmışsa S99myscript, komut dosyanızı olarak eklemeniz gerekir S99myscript." ???
Dor

6
Bunun sistemd ile çalışmayacağını unutmayın (örn. Ubuntu 16.04 ile başlayan). Bunun yerine bakın .
Alexander Revo

26

Komutu içine dahil et /etc/rc.local. Kullanıcının çalışma seviyesi değiştiğinde çalıştırılır.

Not: Komutu /etc/rc.local komutunun son satırından önce girmelisiniz: "exit 0".


3
Not: Komutu /etc/rc.localiçerdiği son satırın önüne koymanız gerekir : exit 0
rubo77 20

3
/etc/rc.localubuntu 15.10'da "Bu komut dosyası her çok kullanıcılı çalışma seviyesinin sonunda yürütüldü." Yani senaryo, önyükleme sırasında birkaç kez çalıştırılabilir, değil mi?
Jarno

@ jamo, evet, her çalışma seviyesinde. Bunun "açılışta çalıştırılması" ile ilgili olduğunu, bunun genellikle "açılışta çalıştırılması" anlamına geldiğini bilmiyorum.
erm3nda

17

crontabKomut dosyanızı yeniden başlattıktan sonra çalıştırmak için bir seçenek kullanın ,

cron içine @rebootkod ekleyerek yapabilirsiniz

Kök kullanıcı tarafından crontab'ı açın:

$ sudo crontab -e

Bir sonraki kaydı alt tarafa ekle:

@reboot yourScriptPath 

İstediğini yapacaksın.


crontab -eSüper kullanıcı ayrıcalıklarına ihtiyaç duymayan komutu kullanmak mı demek istediniz ? Merak ediyorum, root olarak çalıştırılması gereken scriptleri çalıştırabilir mi?
Jarno

Bunu test ettim. Komut dosyasını kök olarak çalıştırmaz.
jarno

4
sudo crontab -eÇalıştırma sırasında komut dosyasını root olarak çalıştırmasını sağlamak için komutu çalıştırırken satırı eklemelisiniz .
jarno

kaldırmayı unutma /var/run/crond.reboot, değilse, görevi yerine getirmeyecek
Albert Català

Sadece kayıt için, @ jarno'nun zaten bileceğine eminim. Her kullanıcının kendi cron görevi vardır; bu nedenle, onu bir tanesine eklerseniz (sudo olmadan crontab-e çalıştırarak) komut dosyası kullanıcı tarafından çalıştırılır. Bu nedenle, komut dosyalarını boot sırasında root olarak çalıştırabilmesi için root olarak çalıştırmanız gerekir.
eddieferetro

9

Bu benim için Ubuntu 17.04'te çalıştı:

  1. disable_cdromSizin için uygun olan bir tur betiği dosyası oluşturun . Benim durumumda home/yterle/disable_cdrom. Benim durumumda:

    #!/bin/sh
    eject /dev/sr0 -i 1
    
  2. çalıştırılabilir yap chmod 775 disable_cdrom

  3. gezin /etc/systemd/systemve orada bir servicedosya oluşturun. Örneğinsudo gedit /etc/systemd/system/disable_cdrom.service

Benim disable_cdrom.serviceşuna benziyor:

[Unit]
Description=Disable cdrom

[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom

[Install]
WantedBy=multi-user.target

Nerede ExecStartile komut dosyasını çalıştırmak işaret/bin/sh

Sonra systemctl enable disable_cdrom.servicesystemd servisini etkinleştirmek için çalıştırın


1
Aradığım şey bu oylama, ancak bence demek istediğinsystemctl enable disable_cdrom.service
KennetRunner 23:18

5

Komut Dosyası dosyanızı /etc/init.d/ Yürütülebilir izne dahil edin ve ardından farklı çalışma düzeyi belirleyin

$ update-rc.d script-name default

Komut dosyanızı açılışta başlatır.


Kali Linux v2.0'da benim için çalışmıyor. Bunu mu demek istediniz update-rc.d script-name enable?
Sopalajo de Arrierez

update-rc.d /scc/init.d/ <script-name> 'de kopyaladığınız varsayılan kabuk betiği
MS Parmar

4

Şunun gibi bir metin dosyası oluşturun /etc/cron.d/:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot   root    yourScriptPath

( yourScriptPathÇalıştırmak istediğiniz komut dosyasının yoluyla değiştirmelisiniz .)


1

Komut dosyasını eklerken dikkatli olun rc.local- Bu yüzden açılış ekranına sıkışıp kaldım. Alt+ F1Tuşlarına basmak , açılış ekranının arkasında ne olduğunu ortaya çıkardı (komut dosyası rc.localçalışıyordu).

Bundan çıkamadım.

  • Ctrl+ Alt+ Delveya
  • Alt+ PrtSc+ Kveya
  • Ctrl+ Alt+F#

hiç birşey çalışmıyor.

Bir USB Ubuntu görüntüsünden önyüklemek, bulmak rc.local, dosyalamak ve silmek için kendime izin vermem gerekiyordu. Ne yaptığını bilmiyorsan, bir şeyler yapmamalısın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.