Headernya terlihat seperti ini:
#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.
Apa alasan file ini (tidak banyak mengandung), dan perintah apa yang biasanya Anda masukkan ke dalamnya? Apa itu "multiuser runlevel"? (Saya kira rc
"jalankan perintah"?)
debian
configuration
startup
Emanuel Berg
sumber
sumber
Jawaban:
Sebuah runlevel adalah keadaan sistem, menunjukkan apakah itu dalam proses booting atau reboot atau mematikan, atau dalam mode single-user, atau berjalan normal. Program init tradisional menangani tindakan ini dengan beralih ke runlevel yang sesuai. Di Linux, runlevel berdasarkan konvensi :
Runlevel 2 hingga 5 dikenal sebagai runlevel multi-pengguna karena memungkinkan beberapa pengguna untuk masuk, tidak seperti runlevel 1 yang hanya ditujukan untuk administrator sistem.
Ketika perubahan runlevel, init menjalankan skrip rc (pada sistem dengan init tradisional - ada alternatif, seperti Upstart dan systemd ). Script rc ini biasanya memulai dan menghentikan layanan sistem, dan disediakan oleh distribusi.
Skrip
/etc/rc.local
ini untuk digunakan oleh administrator sistem. Ini secara tradisional dijalankan setelah semua layanan sistem normal dimulai, pada akhir proses beralih ke runlevel multiuser. Anda dapat menggunakannya untuk memulai layanan kustom, misalnya server yang diinstal/usr/local
. Sebagian besar instalasi tidak perlu/etc/rc.local
, itu disediakan untuk sebagian kecil kasus di mana itu diperlukan.sumber
rc.local
tidak cocok untuk alasan ini. Karena pertanyaan aslinya adalah tentang Debian, komentar ini mungkin tidak relevan untuk OP.rc.local
secara tradisional dijalankan terakhir, tetapi saya melihat bahwa FreeBSD berhenti melakukan itu ketika mereka beralih ke sistem berbasis ketergantungan. Pikiran Anda, bahkan jikarc.local
dipanggil setelah itu/etc/rc.d/sshd
, itu tidak akan berfungsi dengan baik:rc.local
akan dipanggil segera setelahsshd
proses dimulai, itu bisa dipanggil sebelumsshd
mulai mendengarkan jaringan (tapi kami akan berbicara sepersepuluh detik di paling dalam pengaturan khas).iptables-apply /root/iptables
. Saya sedang dalam proses mencari tahu apa yang salah (menunggu reboot berikutnya). Tetapi jika Anda punya saran, saya dengar.rc
menunjukkan "run-control",The
multiuser
runlevel akan didefinisikan sebagai tingkat di mana jaringan tersedia dan dengan demikian koneksi ke server dapat dibuat menggunakan layanan tersebut sebagai pengganti koneksi konsol terprogram.Pikiran Anda, server umumnya dikelola oleh prosesor layanan (dengan berbagai nama) yang mendukung koneksi jaringan dan pada gilirannya bertindak seolah-olah Anda memang memiliki konsol terprogram.
Sedangkan untuk
rc.local
file, ini adalah kemudahan untuk memungkinkan Anda menentukan semua objek "lokal" (khusus situs) (daemon dan / atau skrip sekali boot saat boot) yang ingin Anda mulai. Anda dapat memilih untuk menggunakan paradigma ini atau mengisi '/etc/init.d' dengan skrip start / stop dengan tepat.sumber
Saya terutama menggunakannya untuk dua hal:
untuk mencatat tanggal dan versi kernel dari setiap reboot. satu-liner sederhana yang dapat dengan mudah ditambahkan ke sistem tanpa ada isian di sekitar ... dan jauh lebih rentan terhadap sejarah boot yang rusak daripada berjalan
uptimed
.untuk menghidupkan kembali direktori lama /etc/rc.boot/ yang dulu berada di debian hingga beberapa tahun yang lalu. Saya masih memiliki beberapa skrip sederhana di sana yang tidak sepadan dengan upaya penulisan ulang sebagai skrip init.d (mis. Skrip Q&P untuk mengirimkan dmesg ke root, dan skrip lain menggunakan hdaparm untuk menonaktifkan spindown idle dan blockdev untuk mengatur read- di depan), dan saya senang mereka dijalankan setelah semua skrip boot-time lainnya.
misalnya
Juga, saya menulis skrip /etc/rc.local awal tahun ini untuk centos dan distro debian untuk mendapatkan metadata gaya-ec2 dari openstack (on
http://169.254.169.254/
) sehingga VMs akan mendapatkan IP, hostname, kunci ssh, dan informasi spesifik contoh lainnya . cloud-init sejak itu telah diporting ke distro-distro ini, jadi skripnya sudah usang sekarang.sumber
The
rc.local
file di Debian adalah sebagian besar untuk kompatibilitas dengan sistem gaya non-init. Anda seharusnya tidak menggunakannya.Sebagai gantinya, Anda disarankan
/etc/init.d/Skeleton
untuk menyalin ke skrip init baru untuk apa pun yang Anda inginkan terjadi saat mengubah runlevel, kemudian gunakaninserv
untuk mengaktifkannya.Pembaruan: Sesuai komentar di bawah ini, jawaban ini tidak lagi direkomendasikan. Namun, jawaban ini telah diposting beberapa tahun sebelum penghancuran kerangka, dan kerangka itu masih ada di Debian tidak stabil pada Januari 2019.
sumber
/etc/init.d/skeleton
bukan jalannya.