ルーターで実行されているDebianベースのオペレーティングシステムでPythonアプリケーションを実行しようとしています。このアプリケーションは、サイトパッケージとPythonバイナリとともにプリバンドルされています。仮想環境と同じです。アプリケーションはかなり大きいので(Webサーバー)ここに投稿する必要はないようです。
起動時にアプリケーションを起動するためのinit.dスクリプトを作成しました。私は同じアプリのために他のデバイスで同じスクリプトを使用し、そのデバイスで動作します。残念ながら、ルータではそうではなく、一日中理由を見つけるために送信しました。しかし今、あきらめてここに質問をします。
以下のように初期化スクリプトを最小限に最小化しました。
#!/bin/bash
### BEGIN INIT INFO
# Provides: Webserver
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: ...
# Description: ...
### END INIT INFO
/path/to/python /path/to/main.py /path/to/configfile &
exit 0
元の台本はそれよりはるかに広範囲でした。でもこれくらいは大丈夫だと思います。
rc*.d
次のように、正しいディレクトリにシンボリックリンクを作成しました。
update-rc.d webserver defaults
実際に生成されたことを確認しましたが、そうでした。
再起動後は何も起こりません。アプリケーションは起動しません。端末でスクリプトを実行すると、期待どおりに起動します。
コマンド出力をログファイルにリダイレクトしてみました。ファイルが生成されますが空です。だから、起動時にどのようなエラーが発生するのかわかりません。
テストするために、アプリケーションを起動するコマンドを毎秒何かを印刷する単純な無限シェル(およびPython)スクリプトに置き換えました。コンピュータを再起動した後、両方のスクリプトが実行されていました。
すべてのログファイル(多くはありません)を調べましたが、/var/log
アプリケーションが起動しない理由の参照ポイントが見つかりませんでした。出力をリダイレクトするログファイルが空であるため、何が失敗するのかわかりません。しかし、ログファイルは明らかに削除した後に生成されました。したがって、コマンドは実際に実行されます。
エラーを見つけるために何を試すことができますか?
編集する:
引き続き回答を検索した後、可能な解決策を見つけてすぐにルーターで試しました。誰かがアプリケーションがPythonバイナリに付属している場合は仮想環境である可能性があるため、activate
アプリケーションを起動する前にその環境で見つけることができるスクリプトを実行する必要があると述べました。残念ながら、activate
このWebサーバーは含まれていません。