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


9

次のコマンドを使用してサーバーを実行する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"れて/etc/rc.confいる場合)起動しようとすると警告が表示されます。

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

ですから、近づいてきて動作しますが、これよりも優れた機能を手に入れることができるはずです。


このスクリプトをどこかに(今は思い出せません)配置しXX_enable="YES"、/ etc / rc.confに1行挿入して自動起動する必要があります。既存のスクリプトを見つけることから始めます
デイジー

スクリプトを作成する簡単な方法を探しています...コピーして再利用できる優れたスクリプトはありますか?
Josh、

回答:


11

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

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

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

最後に、の慣用句set_rcvarを使用する必要があります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"

問題は、usr/local/pytivo/pyTivo.py デーモン化しないことです。したがって、呼び出し/usr/bin/daemonをせずに実行すると、コマンドがフォアグラウンドで実行されるだけです/etc/rc.d/pytivo start
Josh

ただし、これはstatusおよびstopコマンドを修正します!
Josh、

ああ、スクリプトはデーモン化しませんか?私は最も簡単な修正がセットにだと思うstart_cmd呼び出す前に、load_rc_configstart_cmd="/usr/sbin/daemon -u $pytivo_user $command"
aecolley

これには、スクリプトを実行するために必要な魔法がありました。ありがとう!
Dave Martorana

0

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

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

# REQUIRE: LOGIN

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

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

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

これが役立つことを願っていましたが、効果はありません。私はまだ取得し: /usr/sbin/daemon: unexpected operator、私のrcスクリプトはまだスクリプトが実際に実行されているかどうかわかりません。
Josh、

-xを使用してスクリプトを呼び出して、どのコマンドが失敗するかを確認することができます
修正
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.