Neden /etc/rc.local komutu başlangıçta çalıştırılmıyor?


39

Komut /etc/rc.localdosyasımda, başlangıçta Tiny Tiny RSS için güncelleme arka planını başlatması beklenen tek bir komutum var, ancak komut dosyası başlatma sırasında yürütülmüyor. Neden?

/Etc/rc.local dosyasının tamamı:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local çalıştırılabilir:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local var ve çalıştırılabilir:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local Bu çalışma seviyesi için başlangıçta yürütülmesi gerekiyor:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

/Etc/rc.local komutunu komut satırından elle çağırırsam update_daemon yükler ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... bu sorun çözülene kadar sunucum her yeniden başlatıldığında bunu hatırlamam gerekiyor.

Benzer sorular zaten var, ancak şu ana kadarki bilgileri kendi sorunumda kullanamadım.

Rc.local'daki komut neden başlatma sırasında yürütülmüyor?


requirettyAyar nedeniyle olabilir . Giriş yaptığınızda, betiği TTY'de çalıştırıyorsunuz ancak sistem önyüklemesi sırasında TTY'de değil. Bu link size yardımcı olabilir shell-tips.com/2014/09/08/… Teşekkürler.
KICT

Yanıtlar:


23

rc.local(söz onun komutlardan herhangi yürütülürken bir hata oluşursa, komut çıkar -ebayrak #!/bin/sh -e).

rc.localYürütme gerçekleştiğinde komutlarınızı çalıştırmayı denediğinizde bazı önkoşulların yerine getirilmemesi olasıdır , bu nedenle komut çalıştırma başarısız olur.

Aynı şeyi cpu regülatörünü manuel olarak ayarlarken ve bunu başaramazken de karşılaştım rc.local. İşte update-rc.dkomutlarınızın başlangıçta çalıştırılmasını sağlamak için kullanılan özel geçici çözümüm:

  1. Başlığında myscript.shdizinde bir dosya oluşturun /etc/init.d:#!/bin/sh
  2. Özel komutlarınızı içerik olarak yerleştirin
  3. Çalıştırılabilir yap: sudo chmod +x /etc/init.d/myscript.sh
  4. Komut dosyanız için çeşitli çalışma seviyeleri için sembolik bağlantılar oluşturun: sudo update-rc.d myscript.sh defaults

Ayrıca, /etc/network/if-up.dkomut dosyalarını kontrol edebilir ve ağ başladığında komutlarınızı tetikleyip tetikleyemeyeceğinizi görebilirsiniz.


Cevap için teşekkür ederim. Sorunu gönderdiğimden beri kurulumum değişti, bu nedenle cevabınızın sorunu çözüp çözmeyeceğini test edemiyorum.
xx

Lütfen 4. adımda ne işe yarıyor? Ben yeniyimupdate-rc.d
Mohith7548

7

rc.local da benzer bir problem yaşadım.

sshades bana şu cevabı verdi:

Ubuntu şimdi systemd kullanıyor ve rc.local artık varsayılan olarak "kapalı" olan bir servis olarak kabul ediliyor. Aşağıdaki komutu girip yeniden başlatarak rc.local "on" komutunu açabilirsiniz:

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

Çözümünü test etmeme rağmen mantıklı geldiğini ve işe yarayacağını düşünüyorum. Ancak :

Ayrıca ./.config/autostart-scripts/ dosyasına bir komut dosyası eklemenin hile yapacağına dair bir çözüm buldum


7
Bu hatayı alıyorum. Birim dosyalarında kurulum yapılandırması yoktur ([Kurulum] bölümündeki WantedBy, RequiredBy, Ayrıca, Diğer Ad ayarları ve şablon birimleri için DefaultInstance). Bu, systemctl kullanılarak etkinleştirilmelerinin amaçlanmadığı anlamına gelir. Bu tür ünitelere sahip olmanın olası nedenleri şunlardır: 1) Bir ünite, başka bir ünitenin. / / .Requires / dizininin işaretlenmesiyle statik olarak etkinleştirilebilir. 2) Bir birimin amacı, kendisine bağlı gereksinimi olan başka bir birim için yardımcı olarak hareket etmek olabilir.
Rıfat Erdem Şahin

Ayrıca bu hatayı alıyorum. Kapalıysa rc.local, alternatif nedir?
Ben

5

denemek sudo sysv-rc-confve eğer kontrol rc.localetkindir

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

Evet, etkin.
xx

bu komutun yüklenmesi gerekiyor mu?
jcollum

1
@jcollum evet, aynı isimli bir paketten bir programdır. Yüklemek için,sudo apt install sysv-rc-conf
banan3'14

rc.localhizmetler listemde bile değil!
Ben

5

Rc.local betiğinin çalıştırılabilir olduğundan emin olun:

sudo chmod +x /etc/rc.local

Ardından, etkinleştirin:

sudo systemctl enable rc-local.service

Sistemi yeniden başlatın veya komut dosyasını el ile çalıştırarak başlatın:

sudo systemctl start  rc-local.service

Servis durumu çalıştırılarak görüntülenebilir:

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

Hizmeti el ile etkinleştirmeniz gerekmez. Dosya varsa ve çalıştırılabilir ise, systemd rc-localhizmeti otomatik olarak etkinleştirir .
muru

4

FW kurallarını yükleyen bazı barındırılan sunucularda bu sorunu yaşadık.

Bu kutular üzerinde ÇOK hızlı bir şekilde yeniden başlatılıyorlar ve yük ifadeleri sorunu çözmeden önce rc.local'a bir "uyku 1" koyduklarını gördük. FW kurallarını yüklemeden önce arayüzlerin yerleşmesi biraz zaman verdi sanırım.


1
Teşekkür ederim. sleep 1sorunumu çözdüm İlginç: Çok fazla sunucum var ancak yalnızca birisinde bu sorun var.
Qian Chen,

1

Bir keresinde rc.localWindows'ta Not Defteri ile edildim ve bu problem yaşamaya başladı.

Bu durumda, bir metin editörü kullanmak, EOL stilini 'Unix'e dönüştürmek için Notepad ++ gibi EOL Conversion özelliğini destekleyebilir.

Bunu :set ff=unixVim'de de yapabilirsiniz .


1

Ubuntu lxc konteynerlerinde, eğer rc.local'ın tam olarak doğru bir shebang'a sahip olduğunu buldum.

#!/bin/sh

başarısız olur, ancak eğer shebang'ı kaldırırsanız çalışır.

Neden ya da hangi kabuğu kullandığını anlamadım, ilk sıfırı da bombaladığını düşünüyorum. (Diğer Ubuntu'da uygun yükleme yaparsa Shebang bir sorun değil)


0

/etc/rc.localSunucunun başlatılması sırasında şu komutla çalıştırıldığından emin olmanız gerekir :

sudo systemctl enable rc-local.service

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.