Saya memiliki penjara FreeBSD tempat saya menjalankan server menggunakan perintah:
/usr/sbin/daemon /path/to/script.py
Saat ini saya harus menjalankan perintah ini setiap kali saya me-restart mesin dan jail mulai. Saya ingin perintah ini dimulai /etc/rc
. Apakah ada cara mudah untuk membuat skrip rc FreeBSD untuk suatu daemon
perintah?
UPDATE: Saya membaca dokumentasi BSD ini tentang skrip rc , dan dari situlah saya membuat skrip berikut di /etc/rc.d/pytivo
:
#!/bin/sh
. /etc/rc.subr
name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"
command="/usr/sbin/daemon -u jnet $procname"
load_rc_config $name
run_rc_command "$1"
Ini berfungsi untuk memulai skrip python yang saya inginkan sebagai daemon ketika jail dimulai ... (diberikan pytivo_enable="YES"
ada di /etc/rc.conf
) tetapi skrip rc tidak tahu apakah daemon sedang berjalan (menurutnya tidak saat itu) dan itu memberi peringatan ketika saya mencoba memulainya:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Jadi sudah dekat , dan berfungsi , tapi saya merasa saya harus bisa mendapatkan fungsionalitas yang lebih baik dari ini.
XX_enable="YES"
di /etc/rc.conf untuk membuatnya mulai otomatis. Mulailah dengan menemukan skrip yang adaJawaban:
command
seharusnya tidak mengandung banyak kata. Ini adalah penyebab[
kesalahan yang Anda lihat. Anda harus mengatur bendera apa pun secara terpisah.Juga, Anda harus menggunakan
pytivo_user
untuk mengatur menjalankan uid, dan tidakdaemon -u
. Lihat halaman manual rc.subr (8) untuk semua variabel ajaib ini.Selain itu, Anda harus memberi tahu subsistem rc bahwa pytivo adalah skrip Python sehingga dapat menemukan proses ketika memeriksa untuk melihat apakah itu berjalan.
Akhirnya, Anda harus menggunakan idiomatik
set_rcvar
untukrcvar
.Sesuatu seperti ini (saya tidak yakin ini adalah jalur Python yang benar):
sumber
usr/local/pytivo/pyTivo.py
tidak daemonize , karena itu tanpa menelepon/usr/bin/daemon
saya hanya akan mendapatkan perintah berjalan di forground ketika saya menjalankan/etc/rc.d/pytivo start
status
danstop
perintah!start_cmd
sebelum memanggilload_rc_config
:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
Jika Anda tidak memerlukan skrip rc, Anda bisa menggunakan /etc/rc.local saja.
Untuk skrip rc Anda, Anda kehilangan komentar dependenct, setidaknya satu baris
harus membantu, bahwa itu dijalankan pada waktu yang tepat.
Anda juga mungkin perlu mendefinisikan pidfile
sumber
: /usr/sbin/daemon: unexpected operator
dan skrip rc saya masih tidak tahu apakah skrip tersebut benar-benar berjalan.