Meu nohup.out
arquivo está crescendo rapidamente.
Estou executando um aplicativo em segundo plano, ele está gravando um nohup.out
arquivo,
agora eu preciso girar o nohup.out
arquivo sem matar meu aplicativo. Isso pode ser feito?
Meu nohup.out
arquivo está crescendo rapidamente.
Estou executando um aplicativo em segundo plano, ele está gravando um nohup.out
arquivo,
agora eu preciso girar o nohup.out
arquivo sem matar meu aplicativo. Isso pode ser feito?
Respostas:
Você deve dar uma olhada no flog em combinação com logrotate
. Se você canalizar a saída do aplicativo através disso, poderá SIGHUP
executar o processo de flagelação sem ter que matar o aplicativo em execução.
flog (registrador de arquivos) é um programa que lê entradas de STDIN e grava em um arquivo.
Se SIGHUP for recebido, o arquivo será reaberto, permitindo a rotação do log [consulte logrotate (8) no RH.]
O arquivo de log será reaberto somente se o flog detectar que a rotação ocorreu (ou seja, o arquivo antigo se foi ou o inode foi alterado). flog é extremamente pequeno (menos de 500 bytes de espaço ocupado na memória).
To save output to FILE, use 'nohup COMMAND > FILE'
Você não pode girar. Você pode truncá-lo com o comando >nohup.out
, que excluirá todo o conteúdo do arquivo.
Você pode copiar o arquivo primeiro e depois truncá-lo, se precisar salvar a saída. Mas há uma pequena janela para uma corrida, onde a saída pode ser gravada depois que você copiou o arquivo, mas antes de truncá-lo. Qualquer saída gravada durante essa janela será perdida para sempre.
copytruncate
no logrotate
. Mas nohup.out
raramente é o tipo de arquivo que você configuraria para rotacionar um trabalho cron.
Você não pode.
Você pode desvincular o arquivo (rm), mas os dados ainda têm uma pegada no disco e continuarão sendo gravados enquanto houver um identificador de arquivo aberto.
Você pode renomear o arquivo - mas, novamente, isso não impede que ele seja gravado (mas se você estiver iniciando trabalhos em segundo plano regularmente, os mais novos gravarão no mesmo arquivo).
Realmente, você deve redirecionar explicitamente a saída do trabalho para algo projetado para lidar com isso (por exemplo, rotatelogs apache ).
O logrotate possui uma opção copytruncate disponível, que truncará (esvaziará) o arquivo especificado após ter sido copiado no esquema normal de rotação (e compactação, se definido).
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
Você pode fazer algo assim:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
Você não precisa matar seu aplicativo.
Não tenho certeza se estou atrasado nisso. Mas para os outros que se deparam com este fórum agora, não precisei experimentar nada com açoites nem nada.
Meu trabalho começa assim:
nohup <my process> &
Isso inicia o meu trabalho e começa a anexar a um nohup.out nesse diretório.
Tudo o que eu precisava fazer era configurar um logrotate que normalmente vem com a distribuição e configurar algo como isso no /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
E funcionou !! nohup.out estava sendo truncado ao obter os novos anexos no mesmo arquivo. O processo também não morreu. E um novo nohup.out como nohup.out-20190528
este foi criado.
Espero que isto ajude.