Shell-Script

有沒有一種簡單的方法來創建 FreeBSD rc 腳本?

  • November 5, 2012

我有一個 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的 for rcvar

像這樣的東西(我不確定這是正確的 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"

引用自:https://unix.stackexchange.com/questions/50478