freebsdのrcサービスを使用したPythonスクリプト

freebsdのrcサービスを使用したPythonスクリプト

Freenas刑務所で実行したいPythonスクリプトがあります。サービスデーモンなしで動作しますが、サービスから始めたいです。次のサービススクリプトを作成しました。/etc/rc.d/attendance

#!/bin/sh

# PROVIDE: attendance
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=attendance
rcvar=attendance_enable

load_rc_config $name

: ${attendance_enable="NO"}


pidfile="/var/run/${name}.pid"
command="/root/Zkteco/app.py"
command_interpreter=/usr/local/bin/python
run_rc_command "$1"

私も追加しましたAttend_enable = "はい"/etc/rc.confから

走ると、奉仕参加が始まります私は受け取った

Starting attendance
limits: /root/Zkteco/app.py: No such file or directory
/etc/rc.d/attendance: WARNING: failed to start attendance

私はディレクトリが存在しましたが、/etc/rc.d/attendanceから/usr/local/etc/rc.d/attendanceに移動しようとしましたが、うまくいくようですが、バックグラウンドプロセスとしては機能しません。CTRLがあります。 + Cを押すと停止します。

どのような推奨事項がありますか?スクリプトはfastapiとuvicornを使用するWebアプリですが、それに関連していますか?開始するサービスのエラーログを表示する方法。

私が試したこと

スクリプトでpyinstaller --onefileを使用してバイナリファイルを作成しました。そして変わった

#!/bin/sh
.
.
.
command="/usr/local/bin/app"
run_rc_command "$1

この変更はサービスを開始しますが、バックグラウンドに切り替えることはありません。

ベストアンサー1

のファイルは/etc/rc.dオペレーティングシステムの一部と見なされ、オペレーティングシステムによって管理されます。あなたはする必要がありますただ/usr/local/etc/rc.d.

rc.dはサービス管理フレームワークです。しかし、「サービス」を生成したり、より正確には「プロセスをデーモン化」したりすることは何もしません。これは、「サービス」を処理する統一された方法を提供するために存在します。

期待どおりにアプリがバックグラウンドに落ちないため、終了するにはCTRL-Cを押す必要があります。あなたの期待が起こるものと一致しません。自分でデーモン化(バックグラウンドに移動など)するのは、スクリプト/プログラム/アプリケーションの責任です。 rcスクリプトはアプリケーションのラッパーです。

私はあなたの申請書とuvicornについてよくわかりません。しかし、ドキュメントによると、uvicornはデーモンプロセス自体をサポートしていないようです。これは通常、コマンドライン引数が指定された場合に発生します。これに関する基本的なテストは次のとおりです。コマンドラインからアプリケーションを実行し、コンソールからそれ自体を分離できますか?

これを行う純粋なPythonメソッドが必要な場合は見てください。PEP 3143 - 標準デーモンライブラリ

簡単なFreeBSDメソッドは次のとおりです。デーモン(8)。非常に簡単な例は次のとおりです。

#!/bin/sh

# REQUIRE: LOGIN

. /etc/rc.subr

name=attendance
rcvar=`set_rcvar`
pidfile="/var/run/${name}.pid"
attendance_user="somenotrootuser"
command="/usr/sbin/daemon"
command_args="-c -f -P ${pidfile} -u ${attendance_user} -r /usr/local/bin/app"

load_rc_config $name
run_rc_command "$1"

(望むよりFreeBSD rcスクリプトを作成する簡単な方法はありますか?そしてFreeBSD rc.dスクリプトがデーモンで起動しない)

私はあなたがアプリケーションを配置した場所で/root何かをrootとして実行するような臭いがすることを発見しました。権限のないユーザーとして実行することをお勧めします。

これは簡単な場合に有効です。これが適切な本番展開である場合はもう少し実行する必要がありますが、これはFreeBSDではなくuvicornによるものです。読んだらhttps://www.uvicorn.org/deployment/本番では、多くの場合、gunicornとnginxを使用します。

上記はFreeBSDで作業を実行する「正しい」方法です。 FreeBSDを楽しんで使用している場合は、これを学び、使用するのに最適なツールです。

ただし、Python / WebプログラマーでGunicornなどを設定するのが難しい場合は、インストールが簡単になる可能性があります。監督者。パッケージでインストールが簡単です。sysutils/py-supervisor/。これはrc / daemonの代替と見なすことができ、特にPython Webプロジェクトのより多くの例をオンラインで見つけることができます。

おすすめ記事