Başlangıçta bir kabuk betiği nasıl çalıştırılır?


13

Bir sunucuyu başlatmak için bir komut dosyası oluşturdum (ilk sorum). Şimdi sistem önyüklemesinde çalışmasını ve tanımlı sunucuyu başlatmasını istiyorum. Bunu yapmak için ne yapmalıyım?

Bulgularım bana bu dosyayı /etc/init.dkonuma koymamı söylüyor ve sistem ne zaman önyükleme yapacağını çalıştırıyor. Ama başlangıçtaki ilk argümanın nasıl olacağını anlayamıyorum start? Kullanmak için bu önceden tanımlanmış bir yere mi startolduğu $1? startallKomut dosyasındaki tüm sunucuları başlatacak bir davaya sahip olmak istersem, yönetebileceğim seçenekler nelerdir?

Benim senaryom şöyle:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

Bunun eski olduğunu biliyorum ... ama kabuk '#! / Bin / sh' değil '#! / Bin / bash' / bin / sh olmalıdır. (ör. / usr / lib
takılamıyor

Yanıtlar:


19

/etc/init.dçalıştırılabilir komut dosyalarının göründüğü komut dosyası dizinidir. Ancak, sistem başlatıldıktan sonra komut dosyalarını belirli bir sırada çalıştırmak için /etc/rc#.ddizine dosya eklemeniz gerekir . Burada görünen girişler, sisteminize hangi sırayla ve hangi çalıştırma düzeyi komut dosyalarının çalıştırılacağını söyler /etc/init.d. RC'den sonraki sayı, bu grafiğe göre makinenin hangi çalışma seviyesinde çalıştığını gösterir:

http://en.wikipedia.org/wiki/Runlevel

Eğer varsa:

/etc/init.d/importantscript

Sonra (boş) dosyalara ihtiyacınız var:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

S başlangıç ​​demektir ve K öldürmek demektir. Makineniz başladığında, sistem "Ah, RunLevel 3'te çalışıyorum, '/etc/init.d' deki komut dosyalarının hangi sırayla çalıştırılacağını görmek için rc3.d adresine gidelim." Bu durumda, sistem 'S' ve ardından 'S' den sonraki sayıya göre sıralar ve '/etc/init.d/importantscript start' komutunu yürütür. 20 sadece sipariş amaçlıdır ... betiğiniz 'S19'un arkasında ve' S21'in önünde çalışacaktır. Bu dosyaları basitçe şu şekilde oluşturabilirsiniz:

sudo touch /etc/rc.d/rc3.d/S20importantscript

İşte güzel bir özet: http://www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts


rcX.d / * için "ln -s /etc/init.d/script" için daha yaygın değil mi?
ozma

8

İçinde dosya oluşturmak zorunda değilsiniz /etc/rc.d/rcN.d/; bunun yerine yapmanız gereken init betiği okumanıza bir yorum koymaktır

# chkconfig NNN A B

nerede NNN(örneğin etkin komut dosyası istediğiniz çalışma_seviyeleri kümesidir 345o çalışma seviyesinde aktif olup olmadığını 3, 4ve 5) ve Ave Bbaşlangıç ve durma önceliklerdir. Daha sonra chkconfig --add foo(komut dosyanızın ismini varsayalım foo) dosyaları /etc/rc.d/rcN.d/uygun adlarla oluşturur.

Daha sonra kullanabilirsiniz service foo bargöndermek barBetiğinize mesajı (örneğin start, stopne olursa olsun - senin orası $1geliyor).


0

$ 1, betiğinize iletilen komut satırı bağımsız değişkenidir; başlatma, durdurma veya yeniden başlatma işlemlerinden biridir. In openSUSE , ben çalışma seviyesi editör şeyini useing zaman bu muhtemelen kullanmanız gereken sadece onlar olduğunu düşünüyorum bu yüzden, komut dosyası içine diğer argümanlar geçmesi için bir seçenek olduğunu hatırlamıyorum.

CentOS'u kendim kullanmıyorum , ancak programın hangi çalışma seviyesinin ntsysv olduğunu kontrol etmek için olduğu anlaşılıyor .

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.