-
Notifications
You must be signed in to change notification settings - Fork 191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
logfile overwritten when symlink + delaycompress used #10
Comments
This is caused by a way how logrotate works. It first checks the state of all logs matching the pattern and then rotates them. So vhost3 is also valid for a rotation during this step. Once it starts rotating the logs, it has no clue (currently), that it has rotated it already as part of vhost1 rotation. I will think what to do with that, but I don't want to change the rotation strategy completely... |
Is it possible to add option skip symlinks? |
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#15 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#16 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#17 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#18 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#19 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#20 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#21 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#22 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#23 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#24 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#25 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#26 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#27 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#28 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#29 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#30 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#31 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#32 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 logrotate#34 0x4d961d in main logrotate/logrotate.c:2791:9 logrotate#35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) logrotate#36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING fixes: logrotate#271
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#15 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#16 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#17 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#18 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#19 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#20 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#21 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#22 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#23 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#24 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#25 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#26 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#27 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#28 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#29 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#30 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#31 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#32 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 logrotate#34 0x4d961d in main logrotate/logrotate.c:2791:9 logrotate#35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) logrotate#36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING fixes: logrotate#271
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 #15 0x4d164c in readConfigFile logrotate/config.c:1457:30 #16 0x4c78fc in readConfigPath logrotate/config.c:685:13 #17 0x4d164c in readConfigFile logrotate/config.c:1457:30 #18 0x4c78fc in readConfigPath logrotate/config.c:685:13 #19 0x4d164c in readConfigFile logrotate/config.c:1457:30 #20 0x4c78fc in readConfigPath logrotate/config.c:685:13 #21 0x4d164c in readConfigFile logrotate/config.c:1457:30 #22 0x4c78fc in readConfigPath logrotate/config.c:685:13 #23 0x4d164c in readConfigFile logrotate/config.c:1457:30 #24 0x4c78fc in readConfigPath logrotate/config.c:685:13 #25 0x4d164c in readConfigFile logrotate/config.c:1457:30 #26 0x4c78fc in readConfigPath logrotate/config.c:685:13 #27 0x4d164c in readConfigFile logrotate/config.c:1457:30 #28 0x4c78fc in readConfigPath logrotate/config.c:685:13 #29 0x4d164c in readConfigFile logrotate/config.c:1457:30 #30 0x4c78fc in readConfigPath logrotate/config.c:685:13 #31 0x4d164c in readConfigFile logrotate/config.c:1457:30 #32 0x4c78fc in readConfigPath logrotate/config.c:685:13 #33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 #34 0x4d961d in main logrotate/logrotate.c:2791:9 #35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) #36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING Fixes: #271 Closes #272
Any chance to ever see an option for ignoring symbolic links (as already suggested by @zuf)? |
I see that |
I believe it does.
Could the |
Maybe something like: https://github.com/logrotate/logrotate/compare/master...cgzones:ignore_duplicate_symlinks?expand=1 Edit: it might be racy and won't work if a parent directory is also a symlink (e.g. /var/log/httpd/vhost3/logs/access.log, where /var/log/httpd is a symlink to /var/log/apache2 and /var/log/httpd/vhost3 a symlink to /var/log/httpd/vhost1) |
I found to have lost many logs due to a setup specificity:
I had:
and this kind of configuration :
I found that vhosts1/logs/access.log.1 was always empty, and thus subsequently compressed files were empty too.
If I run logrotate on a specific vhost, the access.log.1 is created and not null.
I'm still not sure about the root cause but I my guess is that the following happens:
All my vhosts having symlink were affected by the issue.
Using the (quite old) logrotate 3.7.8-4ubuntu2.2
The text was updated successfully, but these errors were encountered: