it-swarm-id.com

Bagaimana saya bisa membuat skrip di /etc/init.d mulai saat boot?

Saya pikir saya membaca sesuatu beberapa waktu lalu tentang ini, tetapi saya tidak ingat bagaimana hal itu dilakukan. Intinya, saya punya layanan di /etc/init.d yang saya ingin mulai secara otomatis saat boot. Saya ingat itu ada hubungannya dengan menghubungkan skrip ke dalam /etc/rc.d direktori, tetapi saya tidak dapat mengingat saat ini. Apa perintah untuk ini?

Saya percaya saya menggunakan turunan Fedora/CentOS.

87
Naftuli Kay

Jika Anda menggunakan sistem berbasis Red Hat, seperti yang Anda sebutkan, Anda dapat melakukan hal berikut:

  1. Buat skrip dan tempat di /etc/init.d (Mis. /etc/init.d/myscript). Script harus memiliki format berikut:
#!/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 

Formatnya cukup standar dan Anda dapat melihat skrip yang ada di /etc/init.d. Anda kemudian dapat menggunakan script seperti /etc/init.d/myscript start Atau chkconfig myscript start. Halaman manual ckconfig menjelaskan header skrip:

 > 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.

Contoh mulai, berhenti dan kode status menggunakan fungsi pembantu yang didefinisikan dalam /etc/init.d/functions

  1. Aktifkan skrip

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Periksa skrip memang diaktifkan - Anda akan melihat "pada" untuk tingkat yang Anda pilih.

    $ chkconfig --list | grep myscript
    
115
canen

Anda menguji, apa runlevel mesin Anda biasanya mulai.

runlevel

Seringkali ini 5 atau 2 - ada berbagai konvensi, tetapi tidak ada yang benar-benar ditetapkan, afaik. Ubuntu menggunakan 2, sedangkan distribusi sebelumnya yang saya gunakan selalu digunakan

  • 1 pengguna tunggal (pengguna super)
  • 2 multi pengguna
  • 3 multi-user + jaringan
  • 4 tidak digunakan/dapat didefinisikan pengguna
  • 5 multi pengguna, jaringan + X11

Maka Anda membuat symlink dari skrip init Anda, mungkin /etc/init.d/foobar hingga /etc/rc2.d/SXYfoobar

S berarti 'Mulai skrip ini di runlevel ini (di sini: 2). XY adalah angka desimal dua digit, yang relevan untuk urutan, skrip dimulai.

Jika Anda bergantung pada skrip S45barfoo untuk dijalankan sebelum Anda, dan S55foofoo tergantung pada skrip Anda, Anda akan memilih xy antara 45 dan 55. Untuk angka yang sama urutan boot tidak ditentukan.

Sementara Ubuntu beralih (beralih) ke prosedur startup lain, yang disebut upstart.

Dan perhatikan: Tidak selalu tautan tautan ke /etc/rcX.d - kadang-kadang /etc/init/rcX.d atau yang serupa, tetapi harus mudah ditemukan, di suatu tempat di bawah/etc.

Jika Anda ingin memulai sesuatu di akhir skrip awal, /etc/rc.local akan menjadi file untuk dicari, tetapi jika itu tergantung pada X11 sudah berjalan, Anda mungkin mencari opsi autostart dari lingkungan desktop Anda, atau /etc/X11/Xsession.d/ dengan pola yang sama seperti yang dijelaskan di atas.

Jika Anda bergantung pada jaringan yang berada di atas, ada direktori terpisah (if-up.d), dan untuk perangkat yang dipasang seperti drive USB eksternal /etc/udev/rules.d/.

10
user unknown

Seperti yang ditanyakan Naftuli Tzvi Kay tentang Debian di atas: Dimulai dengan Debian 6, skrip Anda harus berisi header LSB (Linux Standards Base) yang menunjukkan dependensi dan kemampuannya ( lihat halaman wiki debian ).

Jika ada header LSB, Anda dapat menggunakan insserv untuk memasukkan skrip Anda dalam proses boot ( lihat halaman wiki debian lain ).

3
mdt