Saat ini saya mencoba memahami perbedaan antara init.d
dan cron @reboot
untuk menjalankan skrip saat startup / boot sistem.
Penggunaan @reboot
(metode ini disebutkan dalam forum ini oleh hs.chandra ) adalah beberapa yang lebih sederhana, hanya dengan masuk crontab -e
dan membuat @reboot /some_directory/to_your/script/your_script.txt
dan kemudian your_script.txt
akan dieksekusi setiap kali sistem di-boot ulang. Penjelasan mendalam @reboot
ada di sini
Atau dengan menanamkan /etc/init.d/your_script.txt
ke dalam baris kedua skrip Anda yaitu:
#!/bin/bash
# /etc/init.d/your_script.txt
Anda dapat menjalankan chmod +x /etc/init.d/your_script.txt
dan itu juga harus menghasilkan untuk your_script.txt
menjalankan setiap kali sistem di-boot.
T1: Apa perbedaan utama antara keduanya?
T2: Mana yang lebih kuat?
T3: Apakah ada yang lebih baik dari keduanya?
T4: Apakah ini cara yang benar untuk menyematkan skrip untuk dijalankan saat boot?
Saya akan memasukkan file .sh bash untuk dijalankan saat startup.
Jawaban:
init.d
, Juga dikenal sebagai skrip SysV, dimaksudkan untuk memulai dan menghentikan layanan selama inisialisasi dan penutupan sistem. (/etc/init.d/
skrip juga dijalankan pada sistem yang diaktifkan sistem untuk kompatibilitas).start
danstop
dan lebih (lihat kebijakan Debian )crontab
(dan karenanya@reboot
).@reboot
skrip (bukan hanya root)multi-user.target
./etc/rc.local
sering dianggap jelek atau usang (setidaknya oleh redhat ), masih memiliki beberapa fitur bagus:rc.local
adalah (hampir) layanan terakhir yang dimulai.rc.local
dieksekusi setelahnetwork.target
secara default (tidaknetwork-online.target
!)Mengenai systemd
network.target
dannetwork-online.target
, baca Menjalankan Layanan Setelah Jaringan menyala .sumber
/var/run/crond.reboot
file setiap kali, jika saya ingin pekerjaan cron @reboot dieksekusi setiap kali sistem dinyalakan. Jika file ini ada, maka @reboot cron jobs tidak akan dieksekusiPertama, klarifikasi adalah dalam urutan:
httpd
ataucron
Dalam hal apakah lebih baik menggunakan
rc.local
ataucron
menjalankan skrip Anda, saya menduga itu lebih merupakan masalah estetika daripada kepraktisan.cron
, sebagai penjadwal tugas, dimaksudkan sebagai metode untuk melakukan perawatan atau pemeliharaan mesin, seperti memeriksa pembaruan, membersihkan cache, atau melakukan audit keamanan. Ini tidak berarti bahwa itu terbatas untuk melakukan fungsi-fungsi itu, karena dapat menjalankan skrip atau perintah yang diinginkan pada waktu yang ditentukan (seperti@reboot
).Penggunaan
rc.local
, di sisi lain, akan jatuh lebih dalam jenis konfigurasi sistem tugas, karenarc.local
, dieksekusi oleh sistem init mesin, biasanya bertanggung jawab untuk mengatur konfigurasi jaringan mesin, layanan atau lingkungan (tetapi sekali lagi, tidak terbatas hanya pada tugas ini).Kedua poin ini, bagaimanapun, harus marah dengan fakta bahwa tidak semua sistem init menawarkan
rc.local
mekanisme, dan tidak semua daemon cron menawarkan@reboot
tag psuedo.Poin Bonus
Seperti disebutkan,
init.d
adalah direktori yang berisi skrip yang mengontrol layanan yang dapat dimulai atau dihentikan pada sistem Anda (setidaknya pada mesin yang menggunakanSysV
tipe init system). Bergantung pada sistem init Anda dan tujuan skrip Anda, mungkin masuk akal untuk mengubah skrip Anda menjadi skrip init untuk dijalankan dengan cara yang sama seperti layanan. Ini, bagaimanapun, sangat tergantung pada sistem init Anda karena kerangka di sekitar bagaimana file ini dibangun dapat sangat berbeda.Kata terakhir
Perlu juga dicatat bahwa biasanya skrip bash diakhiri dengan akhiran
.sh
bukan.txt
, karena ini langsung menunjukkan file adalah skrip shell, bukan file teks. Yang sedang berkata, asalkan itu memiliki shebang (#!/bin/bash
) di bagian atas file, atau disebut sebagaibash /path/to/script.whatever
, seharusnya tidak masalah dalam hal mengeksekusi skrip.sumber
bash
skrip biasanya tidak (dan bisa dibilang tidak boleh) diakhiri dengansh
ekstensi..sh
bukan.txt
" - secara khusus artinyash
lebih akurat sebagai ekstensi nama file untuk skrip bash (atau skrip shell lainnya) daripadatxt
yang biasanya menunjukkan teks biasa. Anda dapat menggunakan ekstensi apa pun yang membuat Anda tertawa, tetapi konvensi umum adalah, jika menggunakan ekstensish
akan lebih tepat dan biasanya digunakan; meskipun tidak diperlukan, terutama untuk skrip yang dimaksudkan untuk dieksekusi dariPATH
.Saya menulis jawaban saya di bawah ini;
Terlepas dari perbedaan yang disebutkan oleh pengguna lain di atas, saya ingin menyoroti titik bahwa @reboot bergantung pada daemon crond. Anda bergantung pada urutan awal mulai. Meskipun sebagian besar kasus, crond dimulai dengan baik tetapi kadang-kadang gagal untuk memulai (setidaknya saya telah melihat beberapa kegagalan dalam beberapa proyek saya). Saat Anda menulis skrip init, kegagalan biasanya akan terjadi jika Anda melakukan kesalahan pada skrip Anda (contoh: mengandalkan layanan yang akan dimulai setelah layanan Anda)
Berdasarkan di atas, saya pikir init lebih kuat. Tetapi ada poin lain seperti yang disebutkan oleh "Franklin Piat" dalam jawaban pertama. Biasanya Anda memerlukan skrip init untuk daemon dan Anda harus mengikuti kebijakan
Saya tidak berpikir begitu (rc.local agak tua dan usang)
Iya. Biasanya penulis aplikasi / paket melakukan dengan cara ini.
sumber