Buildroot memiliki tiga kemungkinan sistem init, jadi ada tiga cara untuk melakukannya:
BusyBox init
Dengan ini, seseorang menambahkan entri ke /etc/inittab
.
::respawn:/bin/myprocess
Perhatikan bahwa BusyBox init
memiliki /etc/inittab
yang unik format. Kolom kedua tidak ada artinya, dan kolom pertama bukan ID tetapi nama dasar perangkat.
Linux "Sistem V" init
Sekali lagi, seseorang menambahkan entri ke /etc/inittab
.
myprocess:2345:respawn:/bin/myprocess
systemd
Seseorang menulis file unit, katakanlah, /etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
Aktifkan ini untuk mulai otomatis saat boot dengan:
systemctl enable myprocess.service
Mulai secara manual dengan:
systemctl start myprocess.service
Bacaan lebih lanjut
- "3.1.3 sistem init". Panduan pengguna Buildroot .
Bagaimana dengan membuat subkulit dengan loop yang terus-menerus memanggil proses yang sama?
Jika berakhir, iterasi berikutnya dari loop akan berlanjut dan memulainya lagi.
(while true; do
/bin/myprocess
done) &
Jika subkulitnya mati, itu sudah berakhir. Satu-satunya kemungkinan dalam kasus itu adalah membuat proses lain (saya akan menyebutnya ahli nujum) yang memeriksa apakah proses Anda hidup, mulai jika tidak dan jalankan ahli nujum ini dengan cron, sehingga Anda dapat memeriksanya secara teratur.
Langkah selanjutnya adalah bertanya-tanya apa yang bisa terjadi jika cron mati, tetapi pada titik tertentu Anda harus merasa aman dan berhenti khawatir.
Cara termudah adalah menambahkannya ke /etc/inittab, yang dirancang untuk melakukan hal semacam ini:
muncul kembali Jika proses tidak ada, mulai proses. Jangan menunggu penghentiannya (lanjutkan memindai file /etc/inittab). Mulai ulang proses saat mati. Jika prosesnya ada, jangan lakukan apa pun dan lanjutkan memindai file /etc/inittab.
Misalnya, Anda dapat melakukan ini:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess