web-dev-qa-db-ja.com

FreeBSD rcスクリプトを作成する簡単な方法はありますか?

次のコマンドを使用してサーバーを実行するFreeBSDの刑務所があります。

/usr/sbin/daemon /path/to/script.py

現時点では、マシンを再起動して刑務所が起動するたびにこのコマンドを実行する必要があります。このコマンドを/etc/rcから開始したいのですが。 daemonコマンド用のFreeBSD rcスクリプトを作成する簡単な方法はありますか?


UPDATE: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"/etc/rc.confにある場合)が、rcスクリプトはデーモンが実行されているかどうかを認識しません(それはそうではないと考えています)そしてそれを起動しようとすると警告が表示されます:

[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]# 

つまり、closeであり、は機能しますが、これよりも優れた機能を取得できるはずです。

9
Josh

commandに複数の単語を含めることはできません。これが、表示される[エラーの原因です。フラグは個別に設定する必要があります。

また、実行中のuidを設定するには、pytivo_userではなくdaemon -uを使用する必要があります。これらのすべてのマジック変数については、 rc.subr(8) のマニュアルページを参照してください。

また、rcサブシステムにpytivoがPythonスクリプトであることを通知して、実行中かどうかを確認するときにプロセスを確認できるようにする必要があります。

最後に、rcvarには慣用的なset_rcvarを使用する必要があります。

このようなもの(これが正しいかどうかはわかりませんPython path):

#!/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"
11
aecolley

Rcスクリプトが必要ない場合は、/ etc/rc.localだけを使用できます。

あなたのrcスクリプトでは、少なくとも1行の依存コメントがありません

# REQUIRE: LOGIN

それが適切なタイミングで実行されることを助けます。

Pidfileを定義する必要があるかもしれません

pytivo_pidfile="/path/to/your/pidfile"
0
arved