スクリプトには次のコマンドがあります。
exec su -s /bin/sh -c 'exec "$0" "$@" | ts "[%Y-%m-%d %H:%M:%S]"' user -- test.python $FULLPATH &> log &
FULLPATH
テストPythonファイルのパスはどこにありますか?このコマンドを使用して、スクリプトの出力をコマンドのタイムスタンプとともにログファイルに記録したいと思いますts
。
これは実際には起こりません。出力はタイムスタンプなしで記録されます。それ以外は次のように試しました。
exec su -s /bin/sh -c 'exec "$0" "$@"' user -- test.python $FULLPATH | ts "[%Y-%m-%d %H:%M:%S]" &> log &
これにより、前のコマンドと同じ結果が得られます。
これが起こる理由と考えられる解決策のアイデアをいただきありがとうございます。ありがとうございます。
ベストアンサー1
exec
withを使用すると&
(問題の原因ではありませんが)、追加のフォークを節約できるという利点はほとんどありません。パイプラインコンポーネントの場合、シェルを使用してフォークを保存するのがわかりますが、最後のパイプラインコンポーネントzsh
(他のパイプラインコンポーネントを待たないことをcmd1 | exec cmd2
意味する)に適用された場合にのみ表示されます。zsh
ts
ここでは、pythonスクリプトstderrをfileに送信してもリダイレクトされませんlog
。次のことができます。
su -s /bin/sh -c '
"$0" "$@" 2>&1 |
ts "[%Y-%m-%d %H:%M:%S]"
' user -- test.python "$FULLPATH" > log 2>&1 &