次のコマンドを使用してサーバーを実行する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であり、は機能しますが、これよりも優れた機能を取得できるはずです。
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"
Rcスクリプトが必要ない場合は、/ etc/rc.localだけを使用できます。
あなたのrcスクリプトでは、少なくとも1行の依存コメントがありません
# REQUIRE: LOGIN
それが適切なタイミングで実行されることを助けます。
Pidfileを定義する必要があるかもしれません
pytivo_pidfile="/path/to/your/pidfile"