Bashを使って小さなログを書くには?

Bashを使って小さなログを書くには?

execPHPとbashを介してアプリケーションを実行します。私の問題は、これが非常に大きなログファイルを生成することです。 1秒あたりのすべてのアクティビティのログではなく、最後の出力のみが必要です。

これは私の激賛です:

%s > %s 2>&1 & echo -n $! > %s

出力ファイルを追加せずに書き換えるにはどうすればよいですか?

完全なスクリプトは次のとおりです。

  exec(sprintf("%s > %s 2>&1 & echo -n $! > %s", $cmd, $outputfile, $pidfile));

これは私の完全なプログラムです:

$kovNev = 'uid1_fil_'.time();       
$cmd = 'btdownloadheadless --saveas /var/www/virtual/tigyisolutions.hu/boxy/htdocs/downloaded_torrent/'.$kovNev.'/   '.$_REQUEST["torrent"];
$outputfile = 'downloaded_torrent/folyamatok/'.$kovNev.'.txt';
$pidfile = 'downloaded_torrent/folyamatok/'.$kovNev.'_id.txt';
exec(sprintf("%s 2>&1 | tail > %s& echo -n $! > %s", $cmd, $outputfile, $pidfile));

ベストアンサー1

> $outputfileファイルを追加せずに上書きします。>>ファイルに追加されます。とにかく、シェル構成を使用するときにパイプを使用できます。

%s 2>&1 | tail > %s &

注:これはパスに特殊文字が含まれていない場合にのみ機能します。より良い解決策は次のとおりです。

'%s' 2>&1 | tail > '%s'& echo -n $! > '%s'

これにより、それ自体を除くパスに関連するすべての問題が回避されます。

おすすめ記事