Isso está no Ubuntu Server 14.04, mas acho que é aplicável a todos os sistemas operacionais. Estou executando logrotate
como uma tarefa do cron, as configurações do cron são os padrões ( logrotate
existe em /etc/cron.daily
). Eu estou executando um programa que é mimado com o seu arquivo de log - o programa não termina quando o arquivo de log é tocado, mas ele pára de fazer qualquer coisa.
Eu defino logrotate
com a configuração abaixo, os scripts em questão não fazem nada além de parar e iniciar o programa dado. Quando eu corro logrotate -vf /etc/logrotate.conf
ele funciona perfeitamente - o programa é morto, todos os logs são girados e o programa é reiniciado. Quando ele é executado automaticamente, no entanto, algo não está funcionando - eu me levanto de manhã e o programa está em execução, mas não faço nada como se seu arquivo de log fosse tocado durante a execução. O log é girado, então logrotate
fez isso, mas aparentemente ele não parou / iniciou o programa corretamente. Os scripts usam caminhos completos em todos os pontos, nada é encurtado.
O logrotate
é executado como root com suas configurações padrão ( logrotate
in /etc/cron.daily
)? Se não, como posso fazer isso? Isso é mesmo o problema?
Arquivo de configuração com informações específicas do arquivo removidas (exceto o arquivo com problemas):
# see "man logrotate" for details
# rotate log files weekly
weekly
# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be configured here
/home/username/.local/share/bot/bot.log {
compress
daily
nomail
rotate 14
prerotate
/home/username/botscripts/wbstop.sh
endscript
postrotate
/home/username/botscripts/wbstart.sh
endscript
}
Caso seja útil, esses são os dois scripts. O programa leva alguns segundos para desligar, e é por isso que ele dorme. wbstop.sh
:
#!/bin/sh
pkill -INT -f bot.py
sleep 8
wbstart.sh
:
#!/bin/sh
sleep 5
python3 /home/username/bot/bot.py &