GNU/Linux >> Belajar Linux >  >> Linux

Memahami Script rc di Linux

Skrip rc

Ketika init memasuki runlevel, ia memanggil skrip rc dengan argumen numerik yang menentukan runlevel yang akan dituju. rc kemudian memulai dan menghentikan layanan pada sistem seperlunya untuk membawa sistem ke runlevel tersebut. Meskipun biasanya dipanggil saat boot, skrip rc dapat dipanggil oleh init untuk mengubah runlevel. Misalnya, berikut ini dapat digunakan untuk mengubah sistem ke runlevel 3:

# init 3

Saat mengubah ke runlevel 3, rc membawa sistem ke runlevel baru dengan menghentikan semua layanan yang tidak seharusnya berjalan di runlevel 3 dan memulai semua layanan yang berjalan di runlevel 3 yang belum berjalan.

Anda akan menemukan semua skrip inisialisasi sistem di /etc/rc.d. Subdirektori ini memiliki lebih banyak subdirektori, satu untuk setiap runlevel:rc0.d–rc6.d dan init.d . Di dalam subdirektori /etc/rc.d/rc#.d (di mana # diganti dengan nomor satu digit) terdapat tautan simbolis ke skrip master yang disimpan di /etc/rc.d/init.d.

# ls -lrt /etc/rc.d
total 60
-rwxr-xr-x  1 root root   889 Jan 29  2015 rc.local
-rwxr-xr-x  1 root root 20199 Oct  4  2017 rc.sysinit
-rwxr-xr-x  1 root root  2617 Oct  4  2017 rc
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 init.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc1.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc0.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc6.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc4.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc3.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc2.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc5.d

Skrip di init.d mengambil argumen mulai atau berhenti, dan kadang-kadang memuat ulang atau memulai ulang.

Implementasi Runlevel

Runlevel diimplementasikan sebagai direktori pada sistem yang berisi skrip shell untuk memulai dan menghentikan daemon tertentu, mis. /etc/rc1.d/. Sebagian besar sistem memiliki direktori untuk runlevel 0-6.

Skrip dalam setiap direktori diberi nama dengan huruf kapital S , atau huruf kapital K , diikuti dengan nomor dua digit, diikuti dengan nama layanan yang dirujuk. File yang diawali dengan huruf kapital S mewakili skrip yang dimulai saat memasuki runlevel tersebut, sedangkan file yang diawali dengan huruf kapital K mewakili skrip yang dihentikan. Angka menentukan urutan skrip yang harus dijalankan.

Misalnya, daemon mungkin memiliki skrip bernama S35daemon di rc3.d/, dan skrip bernama K65daemon untuk menghentikannya di rc2.d/. Memiliki nomor di awal nama file menyebabkannya diurutkan, dan diproses, dalam urutan yang diinginkan.

/etc/rc

Ketika program /etc/rc dipanggil oleh init untuk mengubah runlevel, ia melakukannya dengan masuk ke direktori untuk runlevel target dan bekerja melalui semua file skrip K## untuk menghentikan layanan yang sedang berjalan yang seharusnya tidak ada di runlevel target dan file S##script untuk layanan yang seharusnya, tetapi tidak saat ini, berjalan di runlevel target.

Karena cara kerja program /etc/rc Linux, masing-masing direktori /etc/rc#.d/ hanya akan memiliki skrip S## atau symlink skrip K## untuk setiap layanan. Juga akan ada symlink untuk setiap layanan di masing-masing dari tujuh direktori /etc/rc#.d/. Dengan pengecualian file S99local (symlink ke ../rc.local), yang hanya muncul di /etc/rc1.d/ melalui /etc/rc5.d/ dan tidak memiliki symlink kill yang sesuai, harus selalu ada yang sama jumlah file di setiap direktori runlevel.

Pesan Ketergantungan Saat Boot

Memiliki skrip mulai dan berhenti dalam urutan yang benar adalah penting. Misalnya, agar NFS dan NIS dapat bekerja dengan baik, portmapper daemon rpcbind RPC harus dijalankan terlebih dahulu.

/etc/init.d/

Untuk menghindari duplikasi skrip, file dalam direktori rc#.d/ sebenarnya adalah tautan simbolis ke file skrip yang terletak di direktori /etc/init.d/. Setiap layanan yang diinstal pada sistem menginstal skrip di direktori ini yang dapat digunakan untuk mengontrol layanan tersebut. Skrip ini ditulis untuk mengambil opsi mulai yang menentukan bahwa mereka harus memulai layanan, dan opsi berhenti menentukan bahwa mereka harus menghentikan layanan.

Kompatibilitas Runlevel Pemula dan SysV

Karena Pemula tidak memiliki gagasan internal tentang runlevel, dukungan untuk mereka ditentukan oleh file /etc/init/rc.conf. Dukungan ini ada untuk menyediakan kompatibilitas mundur untuk Spesifikasi Unix Tunggal, dan implementasi SysV Init sebelumnya.

/etc/rc.local

Skrip khusus untuk menjalankan tugas pada sistem dapat dibuat di direktori /etc/init.d/ dan kemudian tautan simbolis ke skrip tersebut dapat dibuat di direktori /etc/rc#.d/ untuk memulai atau menghentikan skrip sebagai diperlukan. Namun, untuk beberapa tugas, membuat skrip init gaya V Sistem yang lengkap, lengkap dengan opsi mulai dan berhenti, terlalu berlebihan; beberapa tugas, misalnya, perlu dijalankan sekali saat sistem boot, tetapi tidak perlu dimatikan, atau tidak perlu dijalankan setiap kali sistem mengubah runlevel, atau karena alasan lain tidak sepenuhnya dapat dijalankan dari Skrip Init Sistem V.


Linux
  1. Izin Linux 101

  2. Apa runlevel sistem Linux saat ini?

  3. Linux – Mengapa Direktori Root Dilambangkan Dengan A / Sign?

  1. Linux – Bagaimana Cara Mengubah Kata Sandi Root yang Terlupakan?

  2. Linux – Apakah Slash (/) Bagian Dari Nama Direktori Root Linux?

  3. Memahami Kebijakan SELinux di Linux

  1. Memahami Sistem File sysfs (/ sys) di Linux

  2. Memahami File /etc/inittab di Linux

  3. Memahami direktori /etc/skel di Linux