私のホスティング業者がサービスをするためにシステムを使わなければならないことをする方法のために。
このサービスには実行ファイルがあり、それを実行して2番目の実行ファイルにパイプします。しかし、私はstdoutの代わりにstderrにログを記録する(与えられた)pythonパッケージを使用しており、私が望んでいることを実行できません。
だから私は私のサービスのための実行スクリプトを持っています:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
これは、ロギングシステムの実行にパイプされます。
#!/bin/sh
exec multilog t ./main
しかし、パイプはstderrを接続しません(予想どおり)。したがって、グーグルした後、実行にリダイレクトを追加しました。
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
しかし、これは私の問題を解決しません。私自身の出力(pythons printを使用してstdoutへ)は期待どおりにログに記録されます。stderr出力はログに記録されません。
変更したrunscriptを2つのファイルにリダイレクトすると、リダイレクトがないことが示されます(stderrはまだstderrにあります)。リダイレクトを機能させるにはどうすればよいですか?
Pythonスクリプトがstderrを閉じて、ファイルとして再び開く可能性はありますか?
—
エドワードフォーク2016年
dup2()
コード内での呼び出しを探します。stderr出力がどこに行くのか考えていますか?別の考え:コードを開始する前に、ホストの実行ファイルがstderrをこのようにリダイレクトしている可能性があります。
テキストがstderrに送信されていることを完全に確認できますか?スクリプトを、
—
rosuav 2017
import sys; print("Hello, stderr", file=sys.stderr)
確かだと言うスクリプトに置き換えます。
本当にstderr?これ
—
ingopingo 2017
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
を試して、このログファイルを調べてください。
shの代わりにbashを使用するとどうなりますか?
—
Luciano Andress Martini
exec ... 2>&1
実際に標準エラーを標準出力に結合します。だから何か他のものがおかしい。