logrotate : stat of @ failed (No such file or directory)
Le
Laurent Hugé
Bonjour,
Après quelques semaines passée à passer ma machine en
LinuxFromScratch, je suis dans la phase de finition de configuration.
Essayant d'installer logrotate, je me retrouve face à une erreur que
je n'arrive pas à cerner :
- j'ai installé logrotate 3.3 (en mode débugage avec un fichier de
configuration logrotate.conf uniquement composé de /var/log
messages), j'obtiens ceci :
reading config file /etc/logrotate.conf
reading config info for /messages
Handling 1 logs
rotating pattern: /var/log/messages 104857600 bytes (5 rotations)
empty log files are not rotated old logs are removed
errors displayed on stderr
rotating file @
stat of @ failed: No such file or directory
log does not need rotating
- j'ai compilé logrotate 3.5.9, mais lors du make test, j'arrive à :
(cd test; ./test)
/usr/src/apps/système/logrotate-3.5.9/test
error: test-config.1:1 unexpected text
stat of pW@h\@ failed: No such file or directory
(de multiple fois, pour chaque fichier de test en fait).
Ce qui m'inquiète, c'est que logrotate semble lire correctement le
fichier de configuration (il trouve bien /var/log/messages), mais
lorsqu'il tente d'y accéder, il génère une erreur ("rotating file
@").
J'ai inspecté le contenu de logrotate.c, mais tout semble correct.
L'erreur n'est relatée nulle part (ni sur Google, que je cherche ou
non selon logrotate, ni sur le bug report de Debian).
De plus, j'avais déjà installé logrotate sur mon autre machine
(LinuxFromScratch aussi) et je n'ai jamais eu une telle erreur.
En faisant passer logrotate via strace, je m'aperçois qu'il cherche à
accéder à une configuration (?) de popt. Dans le doute, j'ai
réinstallé popt, mais cela n'a rien changé (d'ailleurs, aucun de ces
fichiers n'est installé avec popt, ni n'est disponible dans les
sources).
Il vient aussi lire le fichier /usr/share/zoneinfo/Europe/Paris, mais
là, je ne vois pas pourquoi.
Dans quelle direction faut-il que je cherche ?
Par pitié, ne me dite pas que c'est la glibc qui plante :-( Je ne
verrais pas pourquoi elle ne plante que maintenant alors que j'ai
installé de nombreuses choses sans problème (du style KDE ou GNOME !)
Pour info, voici la sortie de strace logrotate -d /etc
logrotate.conf :
execve("/usr/sbin/logrotate", ["logrotate", "-d", "/etc
logrotate.conf"], [/* 34 vars */]) = 0
brk(0) = 0x8050c6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_sizer315, }) = 0
old_mmap(NULL, 72315, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000
close(3) = 0
open("/usr/lib/libpopt.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\23",
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size2098, }) = 0
old_mmap(NULL, 29744, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40028000
mprotect(0x4002f000, 1072, PROT_NONE) = 0
old_mmap(0x4002f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x6000) = 0x4002f000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340Y\1",
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size30673, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40030000
old_mmap(NULL, 1242308, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40031000
mprotect(0x4015a000, 25796, PROT_NONE) = 0
old_mmap(0x4015a000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x128000) = 0x4015a000
old_mmap(0x4015e000, 9412, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015e000
close(3) = 0
munmap(0x40016000, 72315) = 0
brk(0) = 0x8050c6c
brk(0x8051c6c) = 0x8051c6c
brk(0) = 0x8051c6c
brk(0x8052000) = 0x8052000
open("/etc/popt", O_RDONLY) = -1 ENOENT (No such file or
udirectory)
getuid32() = 0
geteuid32() = 0
open("/root/.popt", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat64("/etc/logrotate.conf", {st_mode=S_IFREG|0600,
st_size8, }) = 0
open("/etc/logrotate.conf", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size8, }) = 0
lseek(3, 0, SEEK_END) = 108
lseek(3, 0, SEEK_SET) = 0
read(3, "compressnotifempty/var/log/me", 108) = 108
close(3) = 0
write(2, "reading config file /etc/logrota", 40) = 40
lstat64("@", 0xbffff120) = -1 ENOENT (No such file or
directory)
write(2, "reading config info for /var/log", 42) = 42
open("/var/lib/logrotate.status", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size), }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "logrotate state -- version 1", 4096) = 29
read(3, "", 4096) = 0
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "Handling 1 logs", 16) = 16
write(2, "rotating pattern: /var/log/messa", 36) = 36
write(2, "104857600 bytes ", 16) = 16
write(2, "(5 rotations)", 14) = 14
write(2, "empty log files are not rotated ", 32) = 32
write(2, "old logs are removed", 21) = 21
write(2, "errors displayed on stderr", 27) = 27
time(NULL) = 1081453962
open("/usr/share/zoneinfo/Europe/Paris", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size82, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0",
4096) = 1082
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "rotating file \234\2\3@\4", 20) = 20
stat64("@", 0xbffff380) = -1 ENOENT (No such file or
directory)
write(2, "stat of \234\2\3@\4 failed: No such fi", 48) = 48
write(2, "log does not need rotating", 27) = 27
exit_group(1) = ?
--
Laurent Hugé (pour m'écrire, ôter PasDeSpam de l'adresse de courriel)
GPG fingerprint = 3AFF A106 39D9 DB2C 885D 41C3 76DC 2C3F 01BE 5D4A
Après quelques semaines passée à passer ma machine en
LinuxFromScratch, je suis dans la phase de finition de configuration.
Essayant d'installer logrotate, je me retrouve face à une erreur que
je n'arrive pas à cerner :
- j'ai installé logrotate 3.3 (en mode débugage avec un fichier de
configuration logrotate.conf uniquement composé de /var/log
messages), j'obtiens ceci :
reading config file /etc/logrotate.conf
reading config info for /messages
Handling 1 logs
rotating pattern: /var/log/messages 104857600 bytes (5 rotations)
empty log files are not rotated old logs are removed
errors displayed on stderr
rotating file @
stat of @ failed: No such file or directory
log does not need rotating
- j'ai compilé logrotate 3.5.9, mais lors du make test, j'arrive à :
(cd test; ./test)
/usr/src/apps/système/logrotate-3.5.9/test
error: test-config.1:1 unexpected text
stat of pW@h\@ failed: No such file or directory
(de multiple fois, pour chaque fichier de test en fait).
Ce qui m'inquiète, c'est que logrotate semble lire correctement le
fichier de configuration (il trouve bien /var/log/messages), mais
lorsqu'il tente d'y accéder, il génère une erreur ("rotating file
@").
J'ai inspecté le contenu de logrotate.c, mais tout semble correct.
L'erreur n'est relatée nulle part (ni sur Google, que je cherche ou
non selon logrotate, ni sur le bug report de Debian).
De plus, j'avais déjà installé logrotate sur mon autre machine
(LinuxFromScratch aussi) et je n'ai jamais eu une telle erreur.
En faisant passer logrotate via strace, je m'aperçois qu'il cherche à
accéder à une configuration (?) de popt. Dans le doute, j'ai
réinstallé popt, mais cela n'a rien changé (d'ailleurs, aucun de ces
fichiers n'est installé avec popt, ni n'est disponible dans les
sources).
Il vient aussi lire le fichier /usr/share/zoneinfo/Europe/Paris, mais
là, je ne vois pas pourquoi.
Dans quelle direction faut-il que je cherche ?
Par pitié, ne me dite pas que c'est la glibc qui plante :-( Je ne
verrais pas pourquoi elle ne plante que maintenant alors que j'ai
installé de nombreuses choses sans problème (du style KDE ou GNOME !)
Pour info, voici la sortie de strace logrotate -d /etc
logrotate.conf :
execve("/usr/sbin/logrotate", ["logrotate", "-d", "/etc
logrotate.conf"], [/* 34 vars */]) = 0
brk(0) = 0x8050c6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_sizer315, }) = 0
old_mmap(NULL, 72315, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000
close(3) = 0
open("/usr/lib/libpopt.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\23",
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size2098, }) = 0
old_mmap(NULL, 29744, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40028000
mprotect(0x4002f000, 1072, PROT_NONE) = 0
old_mmap(0x4002f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x6000) = 0x4002f000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340Y\1",
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size30673, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40030000
old_mmap(NULL, 1242308, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40031000
mprotect(0x4015a000, 25796, PROT_NONE) = 0
old_mmap(0x4015a000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x128000) = 0x4015a000
old_mmap(0x4015e000, 9412, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015e000
close(3) = 0
munmap(0x40016000, 72315) = 0
brk(0) = 0x8050c6c
brk(0x8051c6c) = 0x8051c6c
brk(0) = 0x8051c6c
brk(0x8052000) = 0x8052000
open("/etc/popt", O_RDONLY) = -1 ENOENT (No such file or
udirectory)
getuid32() = 0
geteuid32() = 0
open("/root/.popt", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat64("/etc/logrotate.conf", {st_mode=S_IFREG|0600,
st_size8, }) = 0
open("/etc/logrotate.conf", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size8, }) = 0
lseek(3, 0, SEEK_END) = 108
lseek(3, 0, SEEK_SET) = 0
read(3, "compressnotifempty/var/log/me", 108) = 108
close(3) = 0
write(2, "reading config file /etc/logrota", 40) = 40
lstat64("@", 0xbffff120) = -1 ENOENT (No such file or
directory)
write(2, "reading config info for /var/log", 42) = 42
open("/var/lib/logrotate.status", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size), }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "logrotate state -- version 1", 4096) = 29
read(3, "", 4096) = 0
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "Handling 1 logs", 16) = 16
write(2, "rotating pattern: /var/log/messa", 36) = 36
write(2, "104857600 bytes ", 16) = 16
write(2, "(5 rotations)", 14) = 14
write(2, "empty log files are not rotated ", 32) = 32
write(2, "old logs are removed", 21) = 21
write(2, "errors displayed on stderr", 27) = 27
time(NULL) = 1081453962
open("/usr/share/zoneinfo/Europe/Paris", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size82, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0",
4096) = 1082
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "rotating file \234\2\3@\4", 20) = 20
stat64("@", 0xbffff380) = -1 ENOENT (No such file or
directory)
write(2, "stat of \234\2\3@\4 failed: No such fi", 48) = 48
write(2, "log does not need rotating", 27) = 27
exit_group(1) = ?
--
Laurent Hugé (pour m'écrire, ôter PasDeSpam de l'adresse de courriel)
GPG fingerprint = 3AFF A106 39D9 DB2C 885D 41C3 76DC 2C3F 01BE 5D4A

Poser une question


Ca vient soit du fichier logrotate.conf, soit du contenu de
/var/log/messages (un fichier nommé '@' ?)
les poster serait peut-être judicieux...
euh, ça doit vouloir dire 'poster une petite partie de
/var/log/messages'
[ gerard]# ls -al /var/log/messages
-rw-r----- 1 root root 3940318 avr 9 08:39 /var/log/messages
Gérard Patel
Pardon, je me suis trompé, je voulais dire poster le contenu de /var/log:
ls -al /var/log
Désolé.
Pour ceux qui en doutent encore :
- /etc/logrotate.conf :
compress
notifempty
/var/log/messages {
rotate 5
weekly
size 100M
postrotate
endscript
}
- ls -al /var/log :
total 391404
drwx------ 3 root root 4096 9 avril .
drwxr-xr-x 13 root root 4096 4 mars ..
-rw-r--r-- 1 root root 307519529 9 avril auth.log
-rw-r--r-- 1 root root 768 28 février btmp
-rw-r--r-- 1 root root 0 27 mars cron.log
-rw-r--r-- 1 root root 1318 5 avril cups.err
-rw-r--r-- 1 root root 455913 9 avril cups.log
-rw-r--r-- 1 root root 1243237 9 avril daemon.err
-rw-r--r-- 1 root root 1616541 9 avril daemon.log
-rw-r--r-- 1 root root 0 27 mars emergency
-rw-r--r-- 1 root root 99533 9 avril kdm.log
-rw-r--r-- 1 root root 1711 7 avril kernel.err
-rw-r--r-- 1 root root 267025 9 avril kernel.log
-rw-r--r-- 1 root root 14801416 27 mars kern.log
-rw-r--r-- 1 root root 1945596 9 avril lastlog
-rw-r--r-- 1 root root 0 28 février mail.log
-rw-r--r-- 1 root root 72498119 9 avril messages
-rw-r--r-- 1 root root 32650 7 mars
scrollkeeper.log
-rw-r--r-- 1 root root 1137 27 mars servicelog
drwx------ 8047 root root 184320 9 avril snort
-rw-r--r-- 1 root root 599490 29 février sys.log
-rw-r--r-- 1 root root 15587 9 avril user.log
-rw-r--r-- 1 root root 688896 9 avril wtmp
-rw-r--r-- 1 root root 40905 9 avril
XFree86.0.log
-rw-r--r-- 1 root root 41734 8 avril
XFree86.0.log.old
-rw-r--r-- 1 root root 41541 9 avril
XFree86.1.log
-rw-r--r-- 1 root root 40575 8 avril
XFree86.1.log.old
-rw-r--r-- 1 root huge 41405 2 avril
XFree86.2.log
-rw-r--r-- 1 root huge 41328 30 mars
XFree86.2.log.old
Bon, alors maintenant, qu'est-ce que je fais ? Il y a bien une
évaluation de stat (je suppose) qui ne fonctionne pas comme prévu.
--
Laurent Hugé (pour m'écrire, ôter PasDeSpam de l'adresse de courriel)
GPG fingerprint = 3AFF A106 39D9 DB2C 885D 41C3 76DC 2C3F 01BE 5D4A
OK, ça semble correct, sauf qu'il faut relancer syslog-ng après avoir
bougé /var/log/messges. J'ai:
postrotate
/etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
endscript
Mais ça n'est pas là que tu a un problème...
D'après le strace, le nom du fichier est ''
ce qui est bien étrange.
Vérifie, avec hexedit, qu'il n'y a pas, par hasard, des caractères
non imprimables dans le fichier de conf.
Sinon, je ne vois pas...
Ou une information erronée dans /var/lib/logrotate/status ?
Essayes toujours de relancer le strace en affichant la totalité
des messages, et en ne gardant que les open/read/write/close
avec:
strace -v -e trace=open,close,read,write
Ce nom doit bien venir de quelque part !