exec
PHPと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'
これにより、それ自体を除くパスに関連するすべての問題が回避されます。