Debian: Başlangıçta 30 satır shell script yazmak zorunda kalmadan bir script nasıl çalıştırılır?


20

Bir Debian sunucum var ve sadece başlangıçta bir betik çalıştırmam gerekiyor.

Okudum: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Şimdi anladım: insserv: warning: script 'kayıp LSB etiketleri ve geçersiz kılmalar

Şimdi eklemek zorundayım gibi görünüyor:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Şimdi çılgınca görünüyor: sadece başlangıçta bir programı çalıştırmak için komut dosyası 30 satır gibi.

Bunu basit bir şekilde yapmayı sağlayan bir araç var mı?

Saygılarımızla


Ne tür bir senaryo? /Etc/rc.local adresinden çalıştırmayı denediniz mi? Komut dosyasının yolunu rc.local dosyasına koyabilirsiniz ve önyükleme sırasında yürütülür.
Diamant

bir düğüm sürecini başlatan basit bir betik, bir php vs. başlatır ...
yarek

30 satır değil 9 satır sayıyorum. Bunlar yorum yazıyor, kabuk betiği değil (SSH betiği değil).
wurtel

Bunlar LSB başlıklarıdır (bkz. Wiki.debian.org/LSBInitScripts ) ve bir LSB init betiği kazanı 70 satırın kuzeyindedir ( github.com/fhd/init-script-template/blob/master/template gibi şeylere bakın ). Bilgisayarınız tarafından önyükleme sırasında / etc dosyasındaki tek bir komutun el ile çalıştırılmasını istiyorsanız, bu oldukça ayrıntılı bir tören gibi görünüyor!
kristopolous

Yanıtlar:


29

Komut dosyanız "sadece bir komut dosyası" ise ve bir arka plan programı başlatmıyorsa /etc/rc.local(root olarak çalıştırılmış) veya crontab(seçtiğiniz bir kullanıcı olarak çalıştırılmış ) kullanmayı düşünün .

İki örnek:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(örneğin, üzerinden düzenlendi crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Düzenleme 1: Hemen sizin yorumunuzu: senaryonuz her zaman çalışmalıdır cinleri, başlarsa, ben kullanılmamasını tavsiye ediyorum rc.localya crontabve bunun yerine uygun bir (veya birden) yazma init.dkomut (lar). Bu şekilde siz / sisteminiz, zemini temiz bir şekilde yeniden başlatabilir / yeniden yükleyebilir / başlatabilir / durdurabilirsiniz.

Düzenleme 2: Buna çılgınca diyorsunuz, ancak LSB tagsbazı değerler sağlayın: "init.d betikleri için çalışma zamanı bağımlılıklarını belgeleyerek, geçerli önyükleme sırasını doğrulamak, bu bağımlılıkları kullanarak önyüklemeyi sıralamak ve önyükleme komut dosyalarını çalıştırmak mümkün olur Önyükleme işlemini hızlandırmak için paralel. " Daha fazla ayrıntı için Debian wiki'ye gidin .

(Bu arada: Bu bir uyarı, yani aslında, bu size nasıl ve ne yapılacağına bağlı.)


Crontab sürümünü seviyorum .. ama @reboot debian'da çalıştığını sanmıyorum!
Yarek

@yarek: Bunu kendim kullanarak çalışır (sadece komut dosyaları olan komut dosyaları için).
gf_

2
çalışır, ancak sadece root kullanıcısı olduğunu düşünüyorum, bu yüzden yapmanız gereken@reboot root /usr/local/bin/your-script.sh
Froggiz

BTW Debian hakkında konuşuyordum!
Froggiz

Gerçekten de oldukça kafam karıştı: cron, sunucu yeniden başlatıldığında, oturumları root olarak açmadan ayscript çalıştırmayı mümkün kılıyor.
Yarek

0

Gözetmen de bir seçenektir. Node.js ve PHP şeylerinizi başlatmak için tekrar bazı satırlar yazacaksınız, ancak daha az olacaktır.


0

Bunun için monitd'yi kullanabilirsiniz , sadece bazı monit tanımları yazın ve bu sizin için zindanlara başlayacaktır. Peki neden LSB komut dosyaları ile uygun bir şekilde kullanmıyorsunuz? Bunu yazmak çok zor değil (sadece bir kere yazıyorsunuz) ve bunu başarmanın en temiz ve en değerli yolu.

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.