O comportamento padrão do rsyslog é anexar rastreamentos a um arquivo de log existente .
Agora, eu vi (CentOs, Scientific Linux) que, quando o rsyslog já está em execução, você exclui o arquivo de log (por exemplo, aquele dedicado aos rastreamentos de log do seu aplicativo), em seguida, executa o aplicativo, o rsyslog não cria um arquivo de log e nenhum rastreio será gravado.
Existe uma opção de configuração que, de alguma forma, pode dizer ao rsyslog para criar um arquivo de log, se não houver, antes de anexar traços a ele?
Nota : fazer service rsyslog restart
isso forçará a criação de um arquivo de log vazio.
rsyslog.conf (nada foi adicionado a ele)
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
Respostas:
No POV do rsyslog, o arquivo de log excluído ainda existe. Isso ocorre porque o rsyslog não está gravando no nome do arquivo, está gravando no identificador de arquivo que foi aberto para o arquivo de log.
Na verdade, os sistemas Unix não excluem um arquivo até que não haja processos com identificadores abertos para o arquivo. Isso significa que o espaço em disco usado pelo arquivo excluído não é liberado até que todo e qualquer identificador de arquivo aberto seja fechado. Isso também significa que qualquer processo com identificadores de arquivo aberto no arquivo excluído pode continuar lendo e / ou gravando no arquivo.
Enviar um sinal HUP (por exemplo, via
pkill -HUP rsyslog
ou/etc/init.d/rsyslog rotate
) para o rsyslog diz para fechar todos os arquivos abertos, recarregar o arquivo de configuração e reabrir todos os arquivos de registro para gravação (criá-los se necessário).Reiniciar o rsyslogd também funciona.
Observe que este é um recurso, não um bug, com algumas implicações úteis - por exemplo, é por isso que o rsyslog continua gravando no mesmo arquivo de log mesmo depois de ter sido rotacionado (ou seja, renomeado / mv-ed) até o rsyslog receber um sinal HUP. Isso significa que os scripts e utilitários de processamento de log não precisam ser cuidadosos com o tempo - eles podem simplesmente girar todos os logs, enviar rsyslog um HUP e tudo continua funcionando, sem perda de dados de log.
BTW, a única maneira de isso não acontecer com o rsyslog seria se fechado e reaberto todos os arquivos de log em cada gravação (ou pelo menos chamado
sync()
). O desempenho seria péssimo.fonte
$ FileCreateMode
Esta opção não faz o que você quer, $ FileCreateMode ?
excerto
Módulo de saída de arquivo
De acordo com a documentação do rsyslog, o argumento File do módulo de saída de arquivo pode ser usado para fazer isso.
trecho omfile module
Enviar um sinal HUP ao syslog
Eu acho que, em última análise, você precisa "acionar" o rsyslog para fazer isso. Eu não acho que será o que você deseja automaticamente. Portanto, você pode emitir um sinal HUP para acionar a recriação do arquivo de log após a exclusão.
Fazer isso criou as seguintes mensagens no meu
/var/log/messages
arquivo de log:fonte