Soru Linux önyükleme sırasında komut dosyası oluşturma: Önyükleme tamamlandığında test nasıl yapılır?


Debian sunucusunda önyükleme sırasında çalıştırılan bir komut dosyası var. Çok erken koşuyor, ama kovulduğunda kontrol edemiyorum. Komut dosyasını kendi çalışmasını geciktirmek için zorlayabilirim:

sleep 60

... ya da alternatif olarak, eylemi birkaç kez deneyebilirim.

TESTRUN=0
ACTIONWORKED=0
while [ $ACTIONWORKED -eq 0 ] && [ $TESTRUN -le 5 ]; do
      # run the action i want
      # quick test if it worked
      # if yes, set ACTIONWORKED=1
      # if no, sleep 10
      # increment TESTRUN
done

Sistemin hazır olduğunu test etmenin daha iyi bir yolu nedir?  Komut, sistem çalışması sırasında diğer zamanlarda çalıştırılacak, böylece test, aralarında ayrım yapmak için gereklidir. "Önyükleme-duy-do-bu-henüz" ve "Not-çizme işletilen-şimdi" devletler. Komut dosyasının her çalışmasında beklemesini istemiyorum.


Düzenle:  Şimdiye kadar fikirler için teşekkürler. Önceden gönderilmiş olanlara alternatifleriniz varsa, gelmelerini sağlayın.

Spesifiklere sormuş olanlara, genel Linux önyükleme işlemiyle çalışan cevapları toplamak için onları özellikle sormadan çıkardım.

"Tam önyükleme" sistemi bir giriş istemi (konsol, X veya herhangi bir şekilde) sunmuş olduğunu varsayalım.


4
2017-11-05 20:55


Menşei




Cevaplar:


Gerçekten istediğinizi yapmanın en iyi yolu, SysV init'teki uygun yere komut dosyasına bir çağrı eklemektir. Komut dosyanızı çağıran bir komut dosyası yazmanızı ve sisteminizi uygun bir yere yükleyene kadar sysadmin'inizi cajole etmeniz önerilir.

DÜZENLEME: Tamam, diğer sorunuzu okudum, ve bir cihazda takıldığında, senkronize olmayan bir komut dosyası hakkında konuştuğunuzu görüyorum. Yapmak istediğiniz şey, çalışma seviyesini 2 olup olmadığını (ya da değiştirdiyseniz varsayılan çalışma seviyeniz ne olursa olsun ve ayrıca tekli kullanıcı modunda çalışmasını istiyorsanız 1) kontrol etmektir. Debian SSS doğru bir şekilde, önyükleme tamamlanana kadar çalışma seviyesi varsayılan değere dönüşmez.


1
2017-11-05 21:08



yapamam Ben sysadmin'im. iyi bir sınava ihtiyacım var. - quack quixote
ah, şimdi bu yararlı. Başka bir cevap, çalışma seviyesini kontrol etmeyi önerdi ama ne zaman değişeceğini bilmiyordum. - quack quixote
Anladığım kadarıyla, tüm /etc/rcS.d komut dosyalarının ilk önce çalıştırılması ve sonra da çalışma düzeyine (2) (veya varsayılan değer) geçiş yapması ve /etc/rc2.d dosyasındaki tüm komut dosyalarını çalıştırmasıdır. - Brent
@brent: Bu benim de anlayışım. betiğimde erken /etc/rcS.d komut dosyaları (S03, bence). Bu nedenle, çalışma seviyesine karşı kontrol etmek muhtemelen doğru testtir. - quack quixote


İnit seviyelerini izlerim.

Bu senin başlamanı sağlamalı..

 [[ `/sbin/runlevel | cut -d " " -f 2` == 5 ]] && echo "Ready"

HTH


5
2017-11-05 21:12



Debian, yani runlevel 2'ye karşı test yapmak daha doğru olur. hı. Tek moda ihtiyacım olursa işe yaramazdı, ama bu bir endişe olduğundan emin değilim. - quack quixote


Bir debian sisteminde, /etc/rc?.d'deki komut dosyasının başlangıcındaki numaraya göre önyükleme sırasında çalıştırılan sırayı belirleyebilirsiniz. Böylece o runlevelde çalıştırılacak ilk betik /etc/rc?.d/S01scriptname - ve sonuncu /etc/rc?.d/S99scriptname olacaktır. Komut dosyanızın S99 ile öneki sadece bir taneSon olarak çalıştırıldığından emin olur.

Alternatif olarak, yapılacak son şeylerden biri aramaktır /etc/rc.local. Komut dosyanızı oradan çağırarak, önyükleme işleminin sonunda çağrıldığından emin olabilirsiniz.

Başka bir seçenek olurdu / etc / nologin dosyasını test edin - önyükleme başında oluşturulur ve sonunda kaldırılır.

Bu söyleniyor - Senaryonun çalışıp çalışmadığını test etme fikrinin kötü olduğunu düşünmüyorum. Betiğin yolunda başka hiçbir şeyin doğru gitmemesini sağlar.


2
2017-11-05 21:10



betik init zincirindeki önceki bir betik tarafından çalıştırılıyor (çatallı değil, çalıştırılıyor) ve bunu değiştirmek istemiyorum. - quack quixote
aslında Debian lenny üzerinde olacak /var/lib/initscripts/nologinve ayarlamalısın DELAYLOGIN=yes içinde /etc/defaults/rcS ... bazı sürümler oluşturabilir /etc/nologin / var'ın altındaki bir bağlantıya dönüştüm ama henüz nerede görmedim. - quack quixote
ve bitti /etc/init.d/bootscripts.shBu amaç için çok geç çalışır. :( - quack quixote


Rc3.d altında bir komut dosyası ekleyebilirsiniz. S99local olarak adlandırın ve diğer tüm komut dosyalarından sonra çalışır.

Scriptler S01xx ila S99xx için yürütülür.


1
2017-11-05 21:06



yapamam betik başka yerden çağrılır. ben could yazmak bir diğeri komut dosyası S99local) tekrar araama bu en uygun çözüm değil. - quack quixote


Ayrıca zaman olarak @reboot kullanarak bir cronjob olarak çalıştırabilirsiniz.


1
2017-11-05 21:09





Sistemin "hazır" olup olmadığını görmeniz gerektiğini varsayıyorsunuz, ama bu ne anlama geliyor? Bu betiğin çalışması için hangi işlevselliğe ihtiyacınız var? Ağın çalışır durumda olması gerekiyor mu? X11'in giriş yapmış bir kullanıcısı olması gerekiyor mu? Bu koşulları doğrudan kontrol edin veya bu belirli adımlar tamamlandığında (yani, / etc / network / interfaces veya eşdeğer olarak postup stanza) çalıştırılacak betiği kurmak için daha iyi bir yer bulun.


1
2017-11-05 21:16





İki bilgi bir cevabı bulmaya yardımcı olacaktır:

  1. Komut dosyası kapalıyken neden ayarlayamıyorsunuz?
  2. Görevinizin başarılı olması için hangi özel servislerin / yeteneklerin hazır / çalışıyor olması gerekir? X? ağ? Düşük sistem yükü? Dosya paylaşıldı mı? Bu şeylerin her biri için kontrol edilebilir; "sistem başlatıldı" çok genel ve bunların tümünü veya tümünü kapsayabilir.

0
2017-11-05 21:17





Önyükleme işleminde çağrılan son dosya /etc/rc.local adlı bir dosyadır. Bu dosyaya yerleştireceğiniz her şey, önyükleme işleminin sonunda çalıştırılacaktır.

Bunun için bir el kitabı örneği http://www.netbsd.org/docs/guide/en/chap-rc.html


0
2017-11-05 23:55





İşte birgerçekten çirkin) çözüm:

  1. bu testi komut dosyasında kullan:

    while [ ! -e "/etc/yes-we-up" ]; do
        sleep 10
    done
    
  2. bunu sonuna ekle /etc/rc.local:

    touch /etc/yes-we-up && chmod 644 /etc/yes-we-up
    
  3. yaratmak /etc/init.d/is-we-up,
     symlink /etc/rc0.d/K02is-we-up ve /etc/rc6.d/K02is-we-up,
     ve bunu içine koy:

    #!/bin/sh -e
    # no we ain't
    rm /etc/yes-we-up
    

0
2017-11-06 15:29