Eu gostaria de executar um processo de servidor no systemd e anexar sua saída padrão e erro a um arquivo, onde o caminho do arquivo contém uma data, assim:
/initech/logs/tps-report-app/sales/2023/09/11/console.log
Idealmente, eu gostaria que esse caminho rolasse automaticamente quando a data mudar, mas não será o fim do mundo se isso não acontecer, já que reiniciamos nossos servidores durante a noite de qualquer maneira.
Uma coisa que não quero fazer é a rotação de log tradicional, em que a saída é gravada em um arquivo com um caminho fixo e depois girada para um arquivo com um caminho datado posteriormente.
OOpção de configuração StandardOutputpermite-me anexar a saída a um arquivo usando append:path
, mas não há menção à substituição de variável nessa string, então presumo que ela precise ser corrigida. Existe alguma maneira de incorporar a data nesse caminho?
Se não, qual é a melhor abordagem aqui? Conectar a saída por meio de um pipe nomeado ou algo assim a um daemon de log como o multilog? Existe algo no 'kit de ferramentas' do systemd assim? Envolva o processo do servidor com um tipo de script de carregador de cadeia que redireciona a saída padrão e o erro? Algo mais?
Responder1
Você poderia, por exemplo, rolar os logs diariamente com logrotate
. Em vez de usar, StandardOutput
você pode dizer ao seu software para enviar logs para /path/$( Something-bashy aqui)/console.log e como parte da postrotate
criação do caminho e, em seguida, reiniciar o serviço em questão.
Editar: acabei de notar que você mencionou que os servidores são reiniciados todas as noites. Então sua única preocupação é garantir que o caminho do arquivo de log exista. Nesse caso, eu incorporaria a criação do caminho do arquivo de log no arquivo ExecStart
. Algo como
ExecStart=/bin/bash -ac \
"mkdir /my/path -p && run_app.sh"