rotação syslog não está funcionando

1

Eu tenho um servidor VPS Ubuntu (9.04 / Jaunty) que não está girando corretamente syslogs.

Aqui está o que eu verifiquei até agora:

  • syslogd-listfiles lista os arquivos que eu acho que devem ser rotacionados
  • cron.daily está em execução (assim diz o syslog)
  • quando executo manualmente as verificações de arquivos no início do /etc/cron.daily/sysklogd, todas elas passam ( test -x /usr/sbin/syslogd-listfiles , test -x /sbin/syslogd , test -f /usr/share/sysklogd/dummy )
  • quando executo manualmente o trabalho cron.daily como raiz ( sudo run-parts --verbose /etc/cron.daily ), os logs são rotacionados como seria de esperar

Alguém tem alguma ideia do que eu possa tentar em seguida ou o que eu possa estar perdendo? Eu estava pensando que talvez o fato de o sysklogd estar executando o processo como syslog (o dono do syslogd per ps -C syslogd -o user= | head -n 1 ) significa que há algum tipo de problema de permissões, e isso parece ser suportado pelos resultados da execução de sudo -u syslog run-parts --verbose /etc/cron.daily que acaba com um monte de erros de permissões, mas não tenho certeza qual é a melhor maneira de resolver isso.

O conteúdo do meu arquivo sysklogd segue, no caso de ser útil. O touch /etc/crontouchtest bit é algo que inseri para verificar quando o arquivo é executado com sucesso. Ele atualiza o último tempo usado ( ls -lut /etc/crontouchtest ) quando executo as partes de execução como raiz, mas não quando o cron é executado.

#! /bin/sh

# sysklogd      Cron script to rotate system log files daily.
#
#               If you want to rotate other logfiles daily, edit
#               this script.  An easy way is to add files manually,
#               to add -a (for all log files) to syslogd-listfiles and
#               add some grep stuff, or use the -s pattern argument to
#               specify files that must not be listed.
#
#               This is a configration file.  You are invited to edit
#               it and maintain it on your own.  You'll have to do
#               that if you don't like the default policy
#               wrt. rotating logfiles (i.e. with large logfiles
#               weekly and daily rotation may interfere).  If you edit
#               this file and don't let dpkg upgrade it, you have full
#               control over it.  Please read the manpage to
#               syslogd-listfiles.
#
#               Written by Martin Schulze <[email protected]>.
#               $Id: cron.daily,v 1.14 2007-05-28 16:33:34 joey Exp $

test -x /usr/sbin/syslogd-listfiles || exit 0
test -x /sbin/syslogd || exit 0
test -f /usr/share/sysklogd/dummy || exit 0

touch /etc/crontouchtest
USER=$(ps -C syslogd -o user= | head -n 1)
[ -z "${USER}" ] && USER="root" || true

set -e

cd /var/log

logs=$(syslogd-listfiles)

test -n "$logs" || exit 0

for LOG in $logs
do
   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u ${USER} -c 7 $LOG >/dev/null
   fi
done

# Restart syslogd
#
/etc/init.d/sysklogd reload-or-restart > /dev/null

EDITAR

Saídas conforme solicitado:

ls -la /etc/cron.daily (run as root)

drwxr-xr-x   2 root root 4096 Oct 23 07:13 .
drwxr-xr-x 107 root root 4096 Oct 23 07:14 ..
-rwxr-xr-x   1 root root  314 Feb 10  2009 aptitude
-rwxr-xr-x   1 root root  111 May 11 11:49 backup-manager
-rwxr-xr-x   1 root root   89 Jan 26  2009 logrotate
-rwxr-xr-x   1 root root 1334 Oct 22 09:35 sysklogd


ps -ef | egrep '[c]ron' (run as root)

root     13369     1  0 Oct21 ?        00:00:02 /usr/sbin/cron

EDIT 2

Caminhos respectivos

de echo $PATH (depois de swithcing to root):

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

de /etc/crontab :

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
por cori 23.10.2010 / 14:56

2 respostas

0

Responda a essa pergunta para que a solução seja mais facilmente encontrada.

A tarefa padrão do sysklogd verifica primeiro o anacron e, se encontrada, não executa a rotação do log dos logs do sistema. Como o @Steven sugeriu que eu removesse o anacron do sistema (já que é um servidor e destina-se a estar em 24/7/365, os recursos do anacron não são realmente necessários). Depois que o anacron sai do sistema, o teste anacron na tarefa cron falha e a rotação do log do sistema funciona como um campeão.

Obrigado @Steven

    
por 01.11.2010 / 13:05
1

The touch /etc/crontouchtest bit is something I inserted to verify when the file is run successfully. It updates the last used time (ls -lut /etc/crontouchtest) when I execute the run-parts as root, but not when the cron.daily runs.

Se eu leio corretamente, /etc/crontouchtest não é atualizado quando cron executa as tarefas cron.daily. Isso, juntamente com o fato de que /etc/cron.daily/sysklogd é executado corretamente quando iniciado manualmente, me leva a suspeitar que algo está causando run-parts a não lançar /etc/cron.daily/sysklogd quando run-parts é executado por cron .

Como cron está sendo executado como root e seu teste manual também foi executado como raiz, há pouca diferença entre os dois ambientes. Tudo o que posso pensar é que cron talvez seja executado com um PATH diferente em comparação com o PATH que existe na linha de comando. Além disso, quando um processo é executado por cron , não há controle tty. Poderia alguma dessas diferenças explicar a diferença nos resultados?

    
por 23.10.2010 / 22:23