crontabでパイプが機能しないシェルスクリプト

crontabでパイプが機能しないシェルスクリプト

手動で実行すると正常に動作しますが、crontabを介して実行すると失敗するシェルスクリプトがあります。スクリプトはデフォルトで次のことを行います。

Python script to get audio data and pipe to stdout | ffmpeg the data from stdin and pipe to stdout | stream the data from stdin

crontab経由で実行すると、stdin()にデータがないことを示すメッセージが表示され、ストリーミングが失敗します...No (more) data available on standard input

私が見つけたこれ答えはcrontabのファイル記述子の問題を示唆しているようですが、問題の詳細と最善の解決策を知りたいです。

編集する: 個々のコマンドを個別に試して問題を解決すると、問題はPythonスクリプトから始まり、次のように文句を言うことがわかりました。

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr"

オーディオデータを出力する代わりに。アドバイスに従うここそしてここ(ファイルの末尾にsys.stdout.flush()を追加してください。)実際のエラーメッセージは次のとおりです。

Traceback (most recent call last):
  File "/home/*username*/testing.py", line 109, in <module>
    sys.stdout.flush()
IOError: [Errno 9] Bad file descriptor

たぶんこれはPythonの問題に近いです。エラーのため、まだstdin / stdoutに関連しているようです。

答え1

問題は実際にはPythonファイルとcronにありましたが、予想どおりにファイル記述子(stdin / stdout)にはないことがわかりました。

逆に言えば、この回答問題を引き起こすcronを実行するときにユーザー入力を要求する行がありました。私はユーザーが入力した要求が不要だったので、それを削除してこの問題を解決しました。

関連情報