Estou armazenando a saída de um programa da seguinte forma:
./programOutputtingTextToStandartOut > program.log
Se o disco ficar cheio, a saída deixará de ser gravada, mesmo que o programa continue em execução. Existe uma maneira de configurar isso para que, quando o espaço livre em disco seja exibido, a gravação no arquivo seja restaurada automaticamente - sem a necessidade de reiniciar o programa?
ATUALIZAR
Adicionando um programa de amostraOutputtingTextToStandartOut.
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string textLine = "Some text";
ostream* out = &cout;
while (true) {
(*out) << textLine << endl << flush;
usleep(500000);
}
}
Respostas:
Em vez de redirecionar a saída no nível do console, sugiro: Use o próprio programa para gerenciar o log. Nesse caso, você pode verificar o espaço em disco em todas as N operações. Se o espaço em disco for menor que o valor mínimo inscrito - pare o log. Depois que ele ficar abaixo do limite inferior - recrie o arquivo de log e continue o log. Embora seja necessário algum grau de código, seria a melhor maneira possível de controlar o log.
fonte
./programOutputtingTextToStandartOut | logger > program.log
onde logger é este:#!/bin/bash while read line; do echo $line; done
echo
pode ser muito lento se houver uma grande quantidade de texto a ser emitidos ...