Como posso escrever um pequeno log com bash?

1

Estou executando aplicativos via PHP exec com o bash. Meu problema é que isso cria arquivos de log grandes. Eu preciso apenas da última saída. Eu não preciso de um registro de todas as atividades por segundo.

Esta é minha festa:

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

Como devo modificar para não anexar o arquivo de saída, para reescrevê-lo?

O script completo é:

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

Este é o meu programa completo:

$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));
    
por tigyi janos 06.06.2013 / 18:06

1 resposta

2

> $outputfile não anexa, mas sobrescreve o arquivo. >> seria anexado ao arquivo. Como você está usando uma construção de shell, você pode usar um pipeline:

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

BTW: Isso funciona somente se os caminhos não contiverem caracteres especiais. A melhor solução seria:

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

Isso evita todos os problemas, exceto o próprio 'nos caminhos.

    
por 06.06.2013 / 18:38

Tags