Bertahun-tahun yang lalu, kita dapat menulis skrip startup kita /etc/rc.local
. Setelah semua layanan sistem dimuat, skrip Anda akan berjalan.
Sekarang, kami menggunakan systemd, kami tidak punya rc.local
lagi. Systemd memulai layanan paralel. Anda dapat menulis layanan Anda sendiri untuk menjalankan rc.local` tetapi Anda tidak dapat memastikan layanan akan berjalan setelah semua layanan sistem dimuat.
Apakah ada cara untuk melakukannya? Atau kita harus menggunakan Before
dan After
dalam file layanan systemd?
Jawaban:
Dalam systemd disarankan untuk menggunakan
Before=
danAfter=
memesan layanan Anda dengan baik di sekitar yang lain.Tetapi karena Anda meminta cara tanpa menggunakan
Before
danAfter
, Anda dapat menggunakan:yang
man systemd.service
menjelaskan:sumber
/proc/sys/kernel/modules_disabled
ke1
pada akhir proses bootItu benar-benar tergantung pada definisi Anda tentang "boot". Saya berasumsi Anda ingin segera berjalan setelah getty dimulai. Untuk melakukan ini, Anda perlu menambahkan layanan Anda ke
/etc/systemd/system/getty.target.wants/
direktori. Anda juga harus memastikan file Anda menggunakan kode yang mirip dengan layanan lain di direktori ini. Untuk menjalankan layanan khusus saat bootup dan shutdown (cukup bunyi bel motherboard saya) saya menggunakan script berikut di/etc/systemd/system/getty.target.wants/service_name.service
/usr/bin/myinitscript.sh
dieksekusi dan memiliki shebang di awal.Perhatikan bahwa tidak semuanya akan dimulai pada titik ini di boot, tetapi ini adalah titik di mana prompt masuk muncul kepada pengguna
Meskipun ini memang menggunakan
Before=
danAfter=
, bagi saya itu jauh lebih dimengerti dan benar-benar berfungsi; Saya tidak menemukan jawaban di atas cukup informatif. Ini juga memungkinkan Anda untuk menggunakan keduanyaExecStart=
danExecStop=
, bukannya terbatas padaType=simple
layanan seperti.sumber
Saya tidak terbiasa dengan spesifik atau ArchLinux, tapi di sini adalah cara mengelola systemd secara umum.
Yah, pada dasarnya systemd adalah kumpulan skrip di /etc/init.d/ yang ditunjukkan oleh symlinks dari /etc/rcX.d, di mana X adalah jumlah run level. Symlinks sendiri memiliki format berikut:
dimana:
Jadi, jika Anda ingin skrip Anda berjalan terakhir dalam urutan boot, Anda perlu melakukan hal berikut:
runlevel
ls /etc/rc<target runlevel>.d/
dan pilih angka dua digit yang lebih besar daripada yang sudah ada di sana.update-rc.d
untuk berbasis Debian atauchkconfig
untuk Fedora atau secara manual, buat symlink /etc/rc.d/S ke skrip init Anda.sumber