/Etc/init.d içindeki bir betiği açılışta nasıl başlatabilirim?


83

Sanırım bir süre önce bu konuda bir şeyler okudum, ama nasıl yapıldığını hatırlayamıyorum. Temel /etc/init.dolarak, açılışta otomatik olarak başlamak istediğim bir hizmetim var . Komut dosyasını /etc/rc.ddizine bağlamakla bir ilgisi olduğunu hatırlıyorum , fakat şu anda hatırlayamıyorum. Bunun için komut nedir?

Fedora / CentOS türevinde olduğuma inanıyorum.


Bu işletim sisteminize bağlıdır. Hangi unix varyantını kullanıyorsunuz ve Linux ise hangi dağıtımda çalışıyorsunuz? Arasında hangisi /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.localve birkaç da var mı?
Gilles

1
Sanırım CentOS ya da onun gibi bir şeydeyim. Cevap Debian için farklı mıdır? Ben de Debian için bir çözümle ilgileniyorum.
Naftuli Kay

Yanıtlar:


109

Red Hat tabanlı bir sistemdeyseniz, belirttiğiniz gibi, aşağıdakileri yapabilirsiniz:

  1. Bir komut dosyası oluşturun ve /etc/init.d(ör. /etc/init.d/myscript) İçine yerleştirin . Komut aşağıdaki biçimde olmalıdır:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Biçimi oldukça standart ve içinde mevcut komut dosyalarını görüntüleyebilirsiniz /etc/init.d. Daha sonra komut dosyasını /etc/init.d/myscript startya da benzeri şekilde kullanabilirsiniz chkconfig myscript start. ckconfigAdam sayfa script başlığını açıklıyor:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Örnek start, stop ve status kodu, içerisinde tanımlanmış yardımcı fonksiyonları kullanır. /etc/init.d/functions

  1. Komut dosyasını etkinleştir

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Komut dosyasının gerçekten etkin olup olmadığını kontrol edin - seçtiğiniz seviyelerde "açık" görmelisiniz.

    $ chkconfig --list | grep myscript
    

3
Chkconfig istediğin şey. +1
whoami

Neden init 2, 3, 4 ve 5 numaralı seviyelerde bir şeye başlıyor? Bir sunucuyu runlevel 2'de başlatmaktan kaçınmak zorunda değil misiniz? Ve çalışma seviyesi 4 RHEL'de zaten tanımlanmadı, peki neden bu çalışma seviyesinde başlatmaya çalışın? Eleştiri değil, sadece bilmek istiyorum. Ben bir yerli Slackware kullanıcısıyım.
Bruce Ediger

4 RHEL'de tanımlanmadı, ancak var. Kendi eşyaların için çalabilirsin.
Kevin M,

Başlık chkconfig man sayfasından alınmıştır. Ben çoğu zaman 235 ya da sadece 35 ile kişisel olarak yapıyorum.
canen

Başlangıç ​​sırasında bir şey başlamazsa bakabileceğim bir günlük var mı?
Utkarsh Sinha

10

Makineniz normalde hangi çalışma seviyesini başlattığını test edersiniz.

runlevel

Genellikle bu 5 veya 2'dir - çeşitli sözleşmeler vardır, ancak hiçbir şey gerçekten kurulmamıştır, afaik. Ubuntu 2 kullanır, eski dağıtım her zaman kullandım

  • 1 Tek kullanıcı (süper kullanıcı)
  • 2 çoklu kullanıcı
  • 3 çoklu kullanıcı + ağ
  • 4 kullanılmaz / kullanıcı tarafından tanımlanabilir
  • 5 çoklu kullanıcı, ağ + X11

O zaman init betiğinden bir link al, belki /etc/init.d/foobarde/etc/rc2.d/SXYfoobar

S 'Bu komut dosyasını bu çalışma seviyesinde başlat (burada: 2). XY, diziyle ilgili iki basamaklı bir ondalık sayıdır, komut dosyaları başlatılır.

Sizden önce çalıştırılacak S45barfoo betiğine güvenirseniz ve S55foofoo betiğinize bağlıysa, 45 ile 55 arasında xy'yi seçersiniz. Eşit sayılar için önyükleme sırası tanımsızdır.

Bu arada Ubuntu, çağrılan başka bir başlatma prosedürüne geçiyor (geçiş yapıyor) upstart.

Ve not: Linkler her zaman bağlantı kurmaz /etc/rcX.d- bazen öyle /etc/init/rcX.dveya benzer bir şeydir, ancak / etc altında bir yerde bulunması kolay olmalıdır.

Başlangıç ​​komut dosyalarının sonunda bir şey başlatmak istiyorsanız, /etc/rc.localaramanız gereken dosya olacaktır, ancak X11 çalışmasına bağlıysa, masaüstü ortamınızın otomatik başlatma seçeneği veya /etc/X11/Xsession.d/açıklandığı gibi benzer bir düzen arayabilirsiniz. yukarıdaki.

Ağın kurulmasına bağlı olarak, ayrı bir dizin var (eğer-up.d) ve harici USB sürücüler gibi monte edilmiş cihazlar için /etc/udev/rules.d/.


Sizin için sembolize eden bir komut yok mu? Böyle bir şeyi hatırladığımı sanıyordum.
Naftuli Kay

1
Öyle değil mi update-rc.d?
Naftuli Kay

GUI veya komut satırı? DE'niz çalışma seviyelerini işaretlemek için bir komut dosyası hazırlayabilir, betiğinizi nerede başlatabilir veya durdurabilir. Öyle bir şey gördüm ama bir ismi hatırlamıyorum ve numarayı nasıl belirteceğimi (xy).
kullanıcı bilinmeyen

Komut satırı. Sizin için bağlantıyı işler ve belirli komut dosyalarının çalışıp çalışmamasına ilişkin anahtarları çevirmenize olanak sağlar.
Naftuli Kay

3

Naftuli Tzvi Kay'ın yukarıda Debian'ı sorduğu gibi: Debian 6 ile başlayarak, betiğinizin bağımlılıklarını ve yeteneklerini gösteren bir LSB (Linux Standards Base) başlığı içermesi gerekir ( debian wiki sayfasına bakın ).

Bir LSB başlığı varsa insserv, komut dosyanızı önyükleme işlemine eklemek için kullanabilirsiniz ( başka bir debian wiki sayfasına bakı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.