Shell-Script
有沒有一種簡單的方法來創建 FreeBSD rc 腳本?
我有一個 FreeBSD 監獄,我在其中使用以下命令執行伺服器:
/usr/sbin/daemon /path/to/script.py
目前,每次我重新啟動機器並且監獄啟動時,我都必須執行這個命令。我想讓這個命令從
/etc/rc
. 有沒有一種簡單的方法可以為daemon
命令創建 FreeBSD rc 腳本?**更新:**我通讀了這個關於 rc 腳本的 BSD 文件,並從中創建了以下腳本
/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"
這可以在監獄啟動時啟動我想要作為守護程序的 python 腳本……(給定
pytivo_enable="YES"
是 in/etc/rc.conf
)但是 rc 腳本不知道守護程序是否正在執行(它認為它不是在執行時)和當我嘗試啟動它時它會發出警告:[root@meryl /home/jnet]# /etc/rc.d/pytivo start [: /usr/sbin/daemon: unexpected operator Starting pytivo. [root@meryl /home/jnet]#
所以它很接近,它可以工作,但我覺得我應該能夠獲得比這更好的功能。
command
不應包含多個單詞。這是[
您看到的錯誤的原因。您應該單獨設置任何標誌。此外,您應該使用
pytivo_user
設置執行的 uid,而不是daemon -u
. 有關所有這些魔術變數,請參見rc.subr(8)手冊頁。此外,您應該讓 rc 子系統知道 pytivo 是一個 Python 腳本,以便它在檢查程序是否正在執行時可以找到該程序。
最後,您應該使用慣用
set_rcvar
的 forrcvar
。像這樣的東西(我不確定這是正確的 Python 路徑):
#!/bin/sh # REQUIRE: LOGIN . /etc/rc.subr name=pytivo rcvar=`set_rcvar` command=/usr/local/pytivo/pyTivo.py command_interpreter=/usr/local/bin/python pytivo_user=jnet start_cmd="/usr/sbin/daemon -u $pytivo_user $command" load_rc_config $name run_rc_command "$1"