1

私は現在、runuserを使用してPythonファイルを実行し、出力をファイルにリダイレクトしています。これはコマンドです:

runuser -l "user" -c "/path/python-script.py parameter1 > /path/file.log &"

これはPythonスクリプトを正しく実行しますが、空のログファイルを作成します。リダイレクトなしで実行した場合:

runuser -l "user" -c "/path/python-script.py parameter1 &"

Pythonスクリプトを正しく実行し、Pythonスクリプトからのすべての出力を作成して画面をフローさせます。Pythonスクリプトからの出力は、stdoutに出力するprintを使用して行われます。

Pythonスクリプトからの出力がファイルにダンプされない理由がわかりません。ファイルのアクセス許可は正しいです。ログファイルは作成されますが、入力されません。

しかし、「parameter1」を削除すると、Pythonスクリプトによって報告されたエラーメッセージがログファイルに正しくダンプされます。

runuser -l "user" -c "/path/python-script.py > /path/file.log &"

エラーメッセージもprintで処理されるので、1つのメッセージがダンプされ、他のメッセージがダンプされない理由がわかりません。

たぶん、runuserは「parameter1」をコマンドか何かとして解釈します。ただし、psで確認できるように、パラメーターはスクリプトに正しく渡されます。

/usr/bin/python /path/python-script.py connect

2>&1を追加しようとしましたが、まだ機能しません。

何か案が ?

4

1 に答える 1

0

出力をログに記録する必要がある起動スクリプトで同様の問題が発生しました。最終的に私は次のことを思いつきました:

USR=myuser    
PRG=myprogrog
WKD="/path/to/workdir"
BIN="/path/to/binary"
ARG="--my arguments"
PID="/var/run/myapp/myprog.pid"

su -l $USR -s /bin/bash -c "exec > >( logger -t $PRG ) 2>&1 ; cd $WKD; { $BIN $ARG & }; echo \$! > $PID "

プロセスの PID も利用できるので便利です。例では syslog に書き込みますが、ファイルに書き込む場合は cat を使用します。

LOG="/path/to/file.log"

su -l $USR -s /bin/bash -c "exec > >( cat > $LOG ) 2>&1 ; cd $WKD; { $BIN $ARG & }; echo \$! > $PID "

新しいシェルを開始し、すべての出力を exec 内のコマンドに結び付けます。

于 2013-09-18T08:37:35.757 に答える