次のコマンドを使用してサーバーを実行するFreeBSD刑務所があります。
/usr/sbin/daemon /path/to/script.py
現在はマシンを再起動し、刑務所が始まるたびにこのコマンドを実行する必要があります。このコマンドを最初から始めたいです/etc/rc
。コマンド用のFreeBSD rcスクリプトを簡単に生成する方法はありますかdaemon
?
修正する:最後まで読んだ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"
pytivo_enable="YES"
これは、刑務所の開始時にデーモンとして目的のPythonスクリプトを起動するのに役立ちます/etc/rc.conf
。警告を発行します。
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
だからそうです閉鎖、そしてそれ働くしかし、これよりも優れた機能が得られるべきだと思います。
答え1
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"
答え2
rcスクリプトが必要ない場合は、/etc/rc.localを使用してください。
rcスクリプトの場合、依存関係コメントがありません(1行以上)。
# REQUIRE: LOGIN
助けになると、タイムリーに実行されます。
pidfile を定義する必要があるかもしれません。
pytivo_pidfile="/path/to/your/pidfile"