Ele pode perder algumas preciosas entradas de log entre essas duas operações que você sugeriu. Eu não recomendaria.
Cleankod
Respostas:
5
Você deve dar uma olhada no flog em combinação com logrotate. Se você canalizar a saída do aplicativo através disso, poderá SIGHUPexecutar 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).
Você pode usar o redirecionamento de arquivo (>) para saída para um arquivo diferente de nohup.out de acordo com a página do homem:To save output to FILE, use 'nohup COMMAND > FILE'
jas_raj
4
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.
Acredito que o truncamento não liberará espaço no disco até que o identificador do arquivo seja fechado.
symcbean
@symcbean Sua opinião é incorreta. Truncar o arquivo libera espaço imediatamente.
precisa saber é o seguinte
Logrotate copytruncate deve fazer o truque.
user9517
@Iain Os passos que descrevo são equivalentes a copytruncateno logrotate. Mas nohup.outraramente é o tipo de arquivo que você configuraria para rotacionar um trabalho cron.
precisa saber é o seguinte
2
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 ).
Isso depende totalmente se nohup é anexado a nohup.out linha por linha ou se ele mantém um ponteiro para a localização de nohup.out. Consulte serverfault.com/questions/221337/… para um exemplo.
pepoluan
1
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.
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
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-20190528este foi criado.
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.fonte
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.
fonte
copytruncate
nologrotate
. Masnohup.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 ).
fonte
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).
Na página de manual do logrotate .
fonte
Você pode fazer algo assim:
Você não precisa matar seu aplicativo.
fonte
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:
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
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.
fonte