Hi, I noticed that my nginx logs will be rotated as expected, but after rotating, nginx stops logging. If I send USR1 to nginx, nginx will resume logging. Seems like the logrotate script doesn't send USR1 to nginx, but it is configured to do that: # cat /etc/logrotate.d/nginx /var/log/webs/*/*.log /var/log/nginx/*_log { daily missingok rotate 42 compress create 0660 root root sharedscripts postrotate test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid` endscript } Then I thought this could have something to do with #474572, so I applied the patch from upstream (BTW: would be nice to have euser_patch support in app-admin/logrotate). But this doesn't change anything (and I also don't get a segfault and I don't have missing files/folder afaik). I noticed, that I don't see the postrotate action in logrotate's output: # logrotate --debug --verbose --force /etc/logrotate.conf reading config file /etc/logrotate.conf including /etc/logrotate.d reading config file elog-save-summary reading config file mcelog reading config file nginx reading config file openrc reading config file rsyncd reading config file rsyslog reading config file shorewall reading config file shorewall6 Handling 11 logs rotating pattern: /var/log/portage/elog/summary.log forced from command line (4 rotations) empty log files are not rotated, old logs are removed switching euid to 250 and egid to 250 considering log /var/log/portage/elog/summary.log log /var/log/portage/elog/summary.log does not exist -- skipping switching euid to 0 and egid to 0 rotating pattern: /var/log/mcelog forced from command line (99 rotations) empty log files are not rotated, old logs are removed considering log /var/log/mcelog log does not need rotating rotating pattern: /var/log/webs/*/*.log /var/log/nginx/*_log forced from command line (42 rotations) empty log files are not rotated, old logs are removed considering log /var/log/webs/00default/access.log log does not need rotating considering log /var/log/webs/00default/error.log log does not need rotating considering log /var/log/webs/crl.example.org/access.log log does not need rotating considering log /var/log/webs/crl.example.org/error.log log does not need rotating considering log /var/log/webs/ocsp.example.org/access.log log needs rotating considering log /var/log/webs/ocsp.example.org/error.log log does not need rotating considering log /var/log/webs/pki.example.org/access.log log needs rotating considering log /var/log/webs/pki.example.org/error.log log does not need rotating considering log /var/log/webs/www.example.org/access.log log does not need rotating considering log /var/log/webs/www.example.org/error.log log does not need rotating considering log /var/log/nginx/error_log log does not need rotating rotating log /var/log/webs/ocsp.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' destination /var/log/webs/ocsp.example.org/access.log-20130713.gz already exists, skipping rotation rotating log /var/log/webs/pki.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' rotating pattern: /var/log/rc.log forced from command line (4 rotations) empty log files are not rotated, old logs are removed considering log /var/log/rc.log log does not need rotating rotating pattern: /var/log/rsync.log forced from command line (7 rotations) empty log files are not rotated, old logs are removed considering log /var/log/rsync.log log /var/log/rsync.log does not exist -- skipping rotating pattern: /var/log/syslog forced from command line (7 rotations) empty log files are not rotated, old logs are removed considering log /var/log/syslog log needs rotating rotating log /var/log/syslog, log->rotateCount is 7 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip renaming /var/log/syslog to /var/log/syslog-20130713 creating new /var/log/syslog mode = 0640 uid = 0 gid = 4 running postrotate script running script with arg /var/log/syslog: " kill -HUP $(cat /run/rsyslogd.pid) &>/dev/null || true " rotating pattern: /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages forced from command line (4 rotations) empty log files are not rotated, old logs are removed considering log /var/log/mail.info log /var/log/mail.info does not exist -- skipping considering log /var/log/mail.warn log /var/log/mail.warn does not exist -- skipping considering log /var/log/mail.err log /var/log/mail.err does not exist -- skipping considering log /var/log/mail.log log /var/log/mail.log does not exist -- skipping considering log /var/log/daemon.log log needs rotating considering log /var/log/kern.log log needs rotating considering log /var/log/auth.log log needs rotating considering log /var/log/user.log log needs rotating considering log /var/log/lpr.log log /var/log/lpr.log does not exist -- skipping considering log /var/log/cron.log log needs rotating considering log /var/log/debug log needs rotating considering log /var/log/messages log needs rotating rotating log /var/log/daemon.log, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/kern.log, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/auth.log, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/user.log, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/cron.log, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/debug, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip rotating log /var/log/messages, log->rotateCount is 4 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip renaming /var/log/daemon.log to /var/log/daemon.log-20130713 creating new /var/log/daemon.log mode = 0640 uid = 0 gid = 4 renaming /var/log/kern.log to /var/log/kern.log-20130713 creating new /var/log/kern.log mode = 0640 uid = 0 gid = 4 renaming /var/log/auth.log to /var/log/auth.log-20130713 creating new /var/log/auth.log mode = 0640 uid = 0 gid = 4 renaming /var/log/user.log to /var/log/user.log-20130713 creating new /var/log/user.log mode = 0640 uid = 0 gid = 4 renaming /var/log/cron.log to /var/log/cron.log-20130713 creating new /var/log/cron.log mode = 0640 uid = 0 gid = 4 renaming /var/log/debug to /var/log/debug-20130713 creating new /var/log/debug mode = 0640 uid = 0 gid = 4 renaming /var/log/messages to /var/log/messages-20130713 creating new /var/log/messages mode = 0640 uid = 0 gid = 4 rotating pattern: /var/log/shorewall-init.log forced from command line (4 rotations) empty log files are not rotated, old logs are removed considering log /var/log/shorewall-init.log log does not need rotating rotating pattern: /var/log/shorewall6-init.log forced from command line (4 rotations) empty log files are not rotated, old logs are removed considering log /var/log/shorewall6-init.log log does not need rotating rotating pattern: /var/log/wtmp forced from command line (1 rotations) empty log files are not rotated, only log files >= 1048576 bytes are rotated, old logs are removed considering log /var/log/wtmp log needs rotating rotating log /var/log/wtmp, log->rotateCount is 1 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' renaming /var/log/wtmp to /var/log/wtmp-20130713 creating new /var/log/wtmp mode = 0664 uid = 0 gid = 406 compressing log with: /bin/gzip removing old log /var/log/wtmp-20130701.gz rotating pattern: /var/log/btmp forced from command line (1 rotations) empty log files are not rotated, old logs are removed considering log /var/log/btmp log /var/log/btmp does not exist -- skipping I hope you noticed 2 things: 1) You would expected something like running postrotate script running script (multiple) with arg /var/log/webs/*/*.log /var/log/nginx/*.log : " test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid` " 2) Notice how the postrotation action for /var/log/syslog will be called: running postrotate script running script with arg /var/log/syslog: " kill -HUP $(cat /run/rsyslogd.pid) &>/dev/null || true " but after /var/log/syslog, the following logfiles from (r)syslog will rotate: /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages After one of these files is rotated, shouldn't the postrotate action, which is configured run again? # cat /etc/logrotate.d/rsyslog /var/log/syslog { rotate 7 daily missingok notifempty delaycompress compress postrotate kill -HUP $(cat /run/rsyslogd.pid) &>/dev/null || true endscript } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate kill -HUP $(cat /run/rsyslogd.pid) &>/dev/null || true endscript } If you remove "sharedscripts", everything is working (well, the postrotate action will be called after every file...). I am running the same configuration on Debian (Debian has logrotate-3.8.1) and I don't see this error here. I tried to restore logrotate-3.8.1 from Gentoo's CVS but this doesn't solve the error for me. At least, postrotate for the other (r)syslog script will be executed, but the postrotate action for nginx still won't be executed. Again, the same config on Debian is working. Reproducible: Always
# emerge --info app-admin/logrotate Portage 2.1.12.13 (default/linux/amd64/13.0, gcc-4.7.3, glibc-2.17, 3.9.8 x86_64) ================================================================= System Settings ================================================================= System uname: Linux-3.9.8-x86_64-Intel-R-_Xeon-R-_CPU_E5405_@_2.00GHz-with-gentoo-2.2 KiB Mem: 16435880 total, 1867892 free KiB Swap: 4194300 total, 4194300 free Timestamp of tree: Thu, 11 Jul 2013 14:15:01 +0000 ld GNU ld (GNU Binutils) 2.23.1 distcc 3.1 x86_64-pc-linux-gnu [disabled] app-shells/bash: 4.2_p45 dev-lang/python: 2.7.5, 3.2.5-r1, 3.3.2-r1 dev-util/pkgconfig: 0.28 sys-apps/baselayout: 2.2 sys-apps/openrc: 0.11.8 sys-apps/sandbox: 2.6-r1 sys-devel/autoconf: 2.69 sys-devel/automake: 1.10.3, 1.13.4, 1.14 sys-devel/binutils: 2.23.1 sys-devel/gcc: 4.7.3 sys-devel/gcc-config: 1.8 sys-devel/libtool: 2.4.2 sys-devel/make: 3.82-r4 sys-kernel/linux-headers: 3.9 (virtual/os-headers) sys-libs/glibc: 2.17 Repositories: gentoo location: /usr/portage sync: rsync://rsync.de.gentoo.org/gentoo-portage/ priority: -1000 ABI="amd64" ABI_X86="64" ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* -@EULA" ACCEPT_PROPERTIES="*" ACCEPT_RESTRICT="*" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" ARCH="amd64" AUTOCLEAN="yes" BOOTSTRAP_USE="cxx unicode python_targets_python3_2 python_targets_python2_7 multilib" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -pipe -march=core2 -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -msse4.1 -mno-lzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=generic" CFLAGS_amd64="-m64" CFLAGS_x32="-mx32" CFLAGS_x86="-m32" CHOST="x86_64-pc-linux-gnu" CHOST_amd64="x86_64-pc-linux-gnu" CHOST_x32="x86_64-pc-linux-gnux32" CHOST_x86="i686-pc-linux-gnu" CLEAN_DELAY="5" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog cpu cpufreq disk dns ethstat network nginx ntpd ping uptime rrdcached filecount" COLLISION_IGNORE="/lib/modules/* *.py[co] *$py.class" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -pipe -march=core2 -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -msse4.1 -mno-lzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=generic" DCCC_PATH="/usr/lib64/distcc/bin" DEFAULT_ABI="amd64" DISTCC_LOG="" DISTCC_VERBOSE="" DISTDIR="/usr/portage/distfiles" EDITOR="/bin/nano" ELIBC="glibc" EMERGE_DEFAULT_OPTS="--quiet-build=n --verbose" EMERGE_WARNING_DELAY="10" EPREFIX="" EROOT="/" FCFLAGS="-O2 -pipe" FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch" FETCHCOMMAND="wget -t 3 -T 60 --passive-ftp -O "${DISTDIR}/${FILE}" "${URI}"" FETCHCOMMAND_RSYNC="rsync -avP "${URI}" "${DISTDIR}/${FILE}"" FETCHCOMMAND_SFTP="bash -c "x=\${2#sftp://} ; host=\${x%%/*} ; port=\${host##*:} ; host=\${host%:*} ; [[ \${host} = \${port} ]] && port=22 ; eval \"declare -a ssh_opts=(\${3})\" ; exec sftp -P \${port} \"\${ssh_opts[@]}\" \"\${host}:/\${x#*/}\" \"\$1\"" sftp "${DISTDIR}/${FILE}" "${URI}" "${PORTAGE_SSH_OPTS}"" FETCHCOMMAND_SSH="bash -c "x=\${2#ssh://} ; host=\${x%%/*} ; port=\${host##*:} ; host=\${host%:*} ; [[ \${host} = \${port} ]] && port=22 ; exec rsync --rsh=\"ssh -p\${port} \${3}\" -avP \"\${host}:/\${x#*/}\" \"\$1\"" rsync "${DISTDIR}/${FILE}" "${URI}" "${PORTAGE_SSH_OPTS}"" FFLAGS="-O2 -pipe" GCC_SPECS="" GENTOO_MIRRORS="http://ftp.uni-erlangen.de/pub/mirrors/gentoo/ ftp://mirror.netcologne.de/gentoo/ ftp://ftp.halifax.rwth-aachen.de/gentoo/ http://mirror.manitu.net/gentoo/ http://ftp.uni-kl.de/pub/linux/gentoo/distfiles/ http://distfiles.gentoo.org" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" GRUB_PLATFORMS="" GUILE_LOAD_PATH="/usr/share/guile/1.8" HISTFILESIZE="10000" HISTSIZE="5000" HISTTIMEFORMAT="[%F %T]: " HOME="/root" INFOPATH="/usr/share/info:/usr/share/gcc-data/x86_64-pc-linux-gnu/4.7.3/info:/usr/share/binutils-data/x86_64-pc-linux-gnu/2.23.1/info" INPUT_DEVICES="keyboard mouse evdev" IUSE_IMPLICIT="prefix" KERNEL="linux" LANG="en_US.UTF-8" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LC_NUMERIC="de_DE.UTF-8" LC_PAPER="de_DE.UTF-8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" LDFLAGS_amd64="-m elf_x86_64" LDFLAGS_x32="-m elf32_x86_64" LDFLAGS_x86="-m elf_i386" LESS="-R -M --shift 5" LESSOPEN="|lesspipe %s" LIBDIR_amd64="lib64" LIBDIR_amd64_fbsd="lib64" LIBDIR_n32="lib32" LIBDIR_n64="lib64" LIBDIR_o32="lib" LIBDIR_ppc="lib32" LIBDIR_ppc64="lib64" LIBDIR_s390="lib32" LIBDIR_s390x="lib64" LIBDIR_sparc32="lib32" LIBDIR_sparc64="lib64" LIBDIR_x32="libx32" LIBDIR_x86="lib32" LIBDIR_x86_fbsd="lib32" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en de" LOGNAME="root" LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;32:*.doc=00;32:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:" MAIL="/var/mail/root" MAKEOPTS="-j9" MANPATH="/usr/local/share/man:/usr/share/man:/usr/share/gcc-data/x86_64-pc-linux-gnu/4.7.3/man:/usr/share/binutils-data/x86_64-pc-linux-gnu/2.23.1/man" MULTILIB_ABIS="amd64 x86" MULTILIB_STRICT_DENY="64-bit.*shared object" MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev)" NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi gzip limit_conn limit_req map referer rewrite spdy proxy" OFFICE_IMPLEMENTATION="libreoffice" OLDPWD="/root" PAGER="/usr/bin/less" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.3" PHP_TARGETS="php5-4" PKGDIR="/usr/portage/packages" PORTAGE_ARCHLIST="ppc sparc64-freebsd ppc-openbsd x86-openbsd ppc64 x86-winnt x86-fbsd ppc-aix alpha arm x86-freebsd s390 amd64 arm-linux x86-macos x64-openbsd ia64-hpux hppa x86-netbsd ppc64-linux x86-cygwin amd64-linux ia64-linux x86 sparc-solaris x64-freebsd sparc64-solaris x86-linux x64-macos sparc m68k-mint ia64 mips ppc-macos x86-interix hppa-hpux amd64-fbsd x64-solaris m68k sh x86-solaris sparc-fbsd" PORTAGE_BIN_PATH="/usr/lib64/portage/bin" PORTAGE_COMPRESS_EXCLUDE_SUFFIXES="css gif htm[l]? jp[e]?g js pdf png" PORTAGE_CONFIGROOT="/" PORTAGE_DEBUG="0" PORTAGE_DEPCACHEDIR="/var/cache/edb/dep" PORTAGE_ELOG_CLASSES="warn error info log qa" PORTAGE_ELOG_MAILFROM="portage@localhost" PORTAGE_ELOG_MAILSUBJECT="[portage] ebuild log for ${PACKAGE} on ${HOST}" PORTAGE_ELOG_MAILURI="root" PORTAGE_ELOG_SYSTEM="save" PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS="5" PORTAGE_FETCH_RESUME_MIN_SIZE="350K" PORTAGE_GID="250" PORTAGE_GPG_SIGNING_COMMAND="gpg --sign --digest-algo SHA256 --clearsign --yes --default-key "${PORTAGE_GPG_KEY}" --homedir "${PORTAGE_GPG_DIR}" "${FILE}"" PORTAGE_INST_GID="0" PORTAGE_INST_UID="0" PORTAGE_INTERNAL_CALLER="1" PORTAGE_OVERRIDE_EPREFIX="" PORTAGE_PYM_PATH="/usr/lib64/portage/pym" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_RSYNC_RETRIES="-1" PORTAGE_SYNC_STALE="30" PORTAGE_TMPDIR="/var/tmp" PORTAGE_VERBOSE="1" PORTAGE_WORKDIR_MODE="0700" PORTAGE_XATTR_EXCLUDE="security.*" PORTDIR="/usr/portage" PORT_LOGDIR_CLEAN="find "${PORT_LOGDIR}" -type f ! -name "summary.log*" -mtime +7 -delete" PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND" PWD="/usr/portage/app-admin/logrotate" PYTHONDONTWRITEBYTECODE="1" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" RESUMECOMMAND="wget -c -t 3 -T 60 --passive-ftp -O "${DISTDIR}/${FILE}" "${URI}"" RESUMECOMMAND_RSYNC="rsync -avP "${URI}" "${DISTDIR}/${FILE}"" RESUMECOMMAND_SSH="bash -c "x=\${2#ssh://} ; host=\${x%%/*} ; port=\${host##*:} ; host=\${host%:*} ; [[ \${host} = \${port} ]] && port=22 ; exec rsync --rsh=\"ssh -p\${port} \${3}\" -avP \"\${host}:/\${x#*/}\" \"\$1\"" rsync "${DISTDIR}/${FILE}" "${URI}" "${PORTAGE_SSH_OPTS}"" ROOT="/" ROOTPATH="/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.3" RPMDIR="/usr/portage/rpm" RUBYOPT="-rauto_gem" RUBY_TARGETS="ruby19 ruby20" SHELL="/bin/bash" SHLVL="1" SSH_AUTH_SOCK="/tmp/ssh-Vttb3NRVUW/agent.1545" SSH_CLIENT="85.116.194.187 3830 22" SSH_CONNECTION="85.116.194.187 3830 85.236.48.100 22" SSH_TTY="/dev/pts/2" SYMLINK_LIB="yes" SYNC="rsync://rsync.de.gentoo.org/gentoo-portage/" TERM="linux" UNINSTALL_IGNORE="/lib/modules/*" USE="acl amd64 berkdb bzip2 cli cracklib crypt cxx dri fortran gdbm gpm iconv idn ipv6 mmx modules mudflap multilib ncurses nls nptl openmp pam pcre readline session sse sse2 sse3 ssl tcpd unicode zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog cpu cpufreq disk dns ethstat network nginx ntpd ping uptime rrdcached filecount" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en de" NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi gzip limit_conn limit_req map referer rewrite spdy proxy" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-4" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="matrox" XTABLES_ADDONS="geoip" USER="root" USERLAND="GNU" USE_EXPAND="ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS CROSSCOMPILE_OPTS CURL_SSL DRACUT_MODULES DVB_CARDS ELIBC ENLIGHTENMENT_MODULES FCDSL_CARDS FFTOOLS FOO2ZJS_DEVICES FRITZCAPI_CARDS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES MISDN_CARDS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS RUBY_TARGETS SANE_BACKENDS USERLAND VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS" USE_EXPAND_HIDDEN="CROSSCOMPILE_OPTS ELIBC KERNEL USERLAND" USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND" USE_EXPAND_UNPREFIXED="ARCH" USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt" USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt" USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt" USE_EXPAND_VALUES_USERLAND="BSD GNU" USE_ORDER="env:pkg:conf:defaults:pkginternal:repo:env.d" VIDEO_CARDS="matrox" XTABLES_ADDONS="geoip" _="/usr/bin/emerge" ================================================================= Package Settings ================================================================= app-admin/logrotate-3.8.5 was built with the following: USE="acl (-selinux)"
From a Debian system with logrotate-3.8.1-4: # logrotate --debug --verbose --force /etc/logrotate.conf reading config file /etc/logrotate.conf including /etc/logrotate.d reading config file apt reading config file aptitude reading config file dpkg reading config file iptraf reading config file munin-node reading config file nginx reading config file percona-server-server-5.5 reading config file php5-fpm reading config file rsyslog Handling 13 logs [...] rotating pattern: /var/log/webs/*/*.log /var/log/nginx/*.log forced from command line (52 rotations) empty log files are not rotated, old logs are removed considering log /var/log/webs/00default/access.log log needs rotating considering log /var/log/webs/00default/error.log log does not need rotating considering log /var/log/webs/example-debian.org/access.log log needs rotating considering log /var/log/webs/example-debian.org/error.log log needs rotating considering log /var/log/nginx/error.log log does not need rotating considering log /var/log/nginx/other_vhosts_access.log log does not need rotating rotating log /var/log/webs/00default/access.log, log->rotateCount is 52 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip [ ... renaming stripped ...] running prerotate script running script (multiple) with arg /var/log/webs/*/*.log /var/log/nginx/*.log : " if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ " renaming /var/log/webs/00default/access.log to /var/log/webs/00default/access.log.1 creating new /var/log/webs/00default/access.log mode = 0660 uid = 33 gid = 4 renaming /var/log/webs/example-debian.org/access.log to /var/log/webs/example-debian.org/access.log.1 creating new /var/log/webs/example-debian.org/access.log mode = 0660 uid = 33 gid = 4 renaming /var/log/webs/example-debian.org/error.log to /var/log/webs/example-debian.org/error.log.1 creating new /var/log/webs/example-debian.org/error.log mode = 0660 uid = 33 gid = 4 renaming /var/log/webs/example-debian.org/suhosin.log to /var/log/webs/example-debian.org/suhosin.log.1 creating new /var/log/webs/example-debian.org/suhosin.log mode = 0660 uid = 33 gid = 4 running postrotate script running script (multiple) with arg /var/log/webs/*/*.log /var/log/nginx/*.log : " [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` " removing old log /var/log/webs/00default/access.log.53.gz error: error opening /var/log/webs/00default/access.log.53.gz: No such file or directory [...] rotating pattern: /var/log/mail.log /var/log/cron.log /var/log/messages.log /var/log/secure.log /var/log/firewall.log forced from command line (5 rotations) empty log files are not rotated, old logs are removed considering log /var/log/mail.log log needs rotating considering log /var/log/cron.log log needs rotating considering log /var/log/messages.log log needs rotating considering log /var/log/secure.log log needs rotating considering log /var/log/firewall.log log does not need rotating rotating log /var/log/mail.log, log->rotateCount is 5 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip [ ... renaming stripped ...] rotating log /var/log/cron.log, log->rotateCount is 5 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip [ ... renaming stripped ...] rotating log /var/log/messages.log, log->rotateCount is 5 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip [ ... renaming stripped ...] rotating log /var/log/secure.log, log->rotateCount is 5 dateext suffix '-20130713' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip [ ... renaming stripped ...] renaming /var/log/mail.log to /var/log/mail.log.1 creating new /var/log/mail.log mode = 0640 uid = 0 gid = 4 renaming /var/log/cron.log to /var/log/cron.log.1 creating new /var/log/cron.log mode = 0640 uid = 0 gid = 4 renaming /var/log/messages.log to /var/log/messages.log.1 creating new /var/log/messages.log mode = 0640 uid = 0 gid = 4 renaming /var/log/secure.log to /var/log/secure.log.1 creating new /var/log/secure.log mode = 0640 uid = 0 gid = 4 running postrotate script running script (multiple) with arg /var/log/mail.log /var/log/cron.log /var/log/messages.log /var/log/secure.log /var/log/firewall.log : " invoke-rc.d rsyslog rotate > /dev/null " removing old log /var/log/mail.log.6.gz error: error opening /var/log/mail.log.6.gz: No such file or directory
Thanks for reporting. Can you check if [1] fixes the problem? [1] https://fedorahosted.org/logrotate/changeset/433
Hi, to apply r433 I also need to apply r432. Just for the records. logrotate-3.8.5 with the applied changes from r433 will fix the problem with (r)syslog (=when kern.log, auth.log, user.log ... rotate, postrotate action will now be called), but the postrotation action for the nginx log will still not be called.
Maybe this will help you: # tree /var/log/webs/ /var/log/webs/ ├── 00default │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── error.log │ └── error.log-20130616.gz ├── crl.example.org │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130619.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130627.gz │ ├── access.log-20130629.gz │ ├── access.log-20130704.gz │ ├── access.log-20130706.gz │ ├── access.log-20130711.gz │ ├── access.log-20130717.gz │ ├── access.log-20130718.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz ├── ocsp.example.org │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130619.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130622.gz │ ├── access.log-20130626.gz │ ├── access.log-20130628.gz │ ├── access.log-20130629.gz │ ├── access.log-20130702.gz │ ├── access.log-20130706.gz │ ├── access.log-20130710.gz │ ├── access.log-20130712.gz │ ├── access.log-20130713.gz │ ├── access.log-20130714.gz │ ├── access.log-20130715.gz │ ├── access.log-20130716.gz │ ├── access.log-20130717.gz │ ├── access.log-20130718.gz │ ├── error.log │ ├── error.log-20130616.gz │ ├── error.log-20130617.gz │ ├── error.log-20130621.gz │ ├── error.log-20130622.gz │ ├── error.log-20130628.gz │ ├── error.log-20130629.gz │ ├── error.log-20130702.gz │ ├── error.log-20130715.gz │ ├── error.log-20130716.gz │ ├── error.log-20130717.gz │ └── error.log-20130718.gz ├── pki.example.org │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130709.gz │ ├── access.log-20130714.gz │ ├── access.log-20130716.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz └── srv1.example.org ├── access.log ├── access.log-20130616.gz ├── access.log-20130626.gz ├── access.log-20130627.gz ├── access.log-20130628.gz ├── access.log-20130706.gz ├── access.log-20130710.gz ├── access.log-20130712.gz ├── access.log-20130713.gz ├── access.log-20130714.gz ├── error.log ├── error.log-20130616.gz ├── error.log-20130626.gz ├── error.log-20130627.gz ├── error.log-20130628.gz └── error.log-20130710.gz 5 directories, 83 files # tree /var/log/nginx/ /var/log/nginx/ ├── error_log ├── error_log-20130617.gz ├── error_log-20130621.gz ├── error_log-20130626.gz ├── error_log-20130627.gz ├── error_log-20130704.gz └── other_vhosts_access.log # logrotate --debug --verbose --force /etc/logrotate.conf reading config file /etc/logrotate.conf including /etc/logrotate.d reading config file elog-save-summary reading config file mcelog reading config file nginx reading config file openrc reading config file rsyncd reading config file rsyslog reading config file shorewall reading config file shorewall6 [...] Handling 11 logs rotating pattern: /var/log/webs/*/*.log /var/log/nginx/*_log forced from command line (42 rotations) empty log files are not rotated, old logs are removed considering log /var/log/webs/00default/access.log log does not need rotating considering log /var/log/webs/00default/error.log log does not need rotating considering log /var/log/webs/crl.example.org/access.log log needs rotating considering log /var/log/webs/crl.example.org/error.log log does not need rotating considering log /var/log/webs/ocsp.example.org/access.log log needs rotating considering log /var/log/webs/ocsp.example.org/error.log log does not need rotating considering log /var/log/webs/pki.example.org/access.log log needs rotating considering log /var/log/webs/pki.example.org/error.log log does not need rotating considering log /var/log/webs/srv1.example.org/access.log log does not need rotating considering log /var/log/webs/srv1.example.org/error.log log does not need rotating considering log /var/log/nginx/error_log log does not need rotating rotating log /var/log/webs/crl.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130718' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' destination /var/log/webs/crl.example.org/access.log-20130718.gz already exists, skipping rotation rotating log /var/log/webs/ocsp.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130718' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' destination /var/log/webs/ocsp.example.org/access.log-20130718.gz already exists, skipping rotation rotating log /var/log/webs/pki.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130718' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' [...]
Thanks. I tested last archive [1] in a (I think) similar but simpler scenario as yours. The postrotate script gets executed. <snip> [...] rotating pattern: /var/log/webs/*/*.log /var/log/nginx/*_log forced from command line (42 rotations) empty log files are not rotated, old logs are removed considering log /var/log/webs/00default/access.log log does not need rotating considering log /var/log/webs/00default/error.log log does not need rotating considering log /var/log/webs/one.example.org/access.log log needs rotating considering log /var/log/webs/one.example.org/error.log log does not need rotating considering log /var/log/webs/two.example.org/access.log log needs rotating considering log /var/log/webs/two.example.org/error.log log does not need rotating considering log /var/log/nginx/error_log log does not need rotating rotating log /var/log/webs/one.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed rotating log /var/log/webs/two.example.org/access.log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed renaming /var/log/webs/one.example.org/access.log to /var/log/webs/one.example.org/access.log-20130722 creating new /var/log/webs/one.example.org/access.log mode = 0660 uid = 0 gid = 0 renaming /var/log/webs/two.example.org/access.log to /var/log/webs/two.example.org/access.log-20130722 creating new /var/log/webs/two.example.org/access.log mode = 0660 uid = 0 gid = 0 running postrotate script running script with arg /var/log/webs/*/*.log /var/log/nginx/*_log : " test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid` " compressing log with: /bin/gzip compressing log with: /bin/gzip [...] </snip> Please, confirm the scenario is similar to yours and test if last version works in your box. [1] https://fedorahosted.org/logrotate/changeset/435/trunk?old_path=%2F&format=zip
Created attachment 353896 [details] strace output Hi, no, r435 did not change anything on my box(es). I attached a strace log. Not sure if this will help you. Could it be ACL-related? # getfacl /var/log/webs/ getfacl: Removing leading '/' from absolute path names # file: var/log/webs/ # owner: root # group: root user::rwx group::r-x other::--x # getfacl /var/log/webs/pki.example.com/ getfacl: Removing leading '/' from absolute path names # file: var/log/webs/pki.example.com/ # owner: root # group: root user::rwx user:nginx:rwx group::rwx mask::rwx other::--- default:user::rwx default:user:nginx:rwx default:group::rwx default:mask::rwx default:other::--- All subfolders in /var/log/webs have similar ACLs.
Hi, OK it is NOT an ACL problem. I rolled out a new web server with our configuration and installed logrotate r435. It is working. Now I switched back to a box, where logrotate r435 is failing. I moved all the old logs out of the way: Before I moved the files: # tree /var/log/webs/ /var/log/webs/ ├── 00default │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── error.log │ └── error.log-20130616.gz ├── crl.example.com │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130619.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130627.gz │ ├── access.log-20130629.gz │ ├── access.log-20130704.gz │ ├── access.log-20130706.gz │ ├── access.log-20130711.gz │ ├── access.log-20130717.gz │ ├── access.log-20130718.gz │ ├── access.log-20130719.gz │ ├── access.log-20130720.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz ├── ocsp.example.com │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130619.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130622.gz │ ├── access.log-20130626.gz │ ├── access.log-20130628.gz │ ├── access.log-20130629.gz │ ├── access.log-20130702.gz │ ├── access.log-20130706.gz │ ├── access.log-20130710.gz │ ├── access.log-20130712.gz │ ├── access.log-20130713.gz │ ├── access.log-20130714.gz │ ├── access.log-20130715.gz │ ├── access.log-20130716.gz │ ├── access.log-20130717.gz │ ├── access.log-20130718.gz │ ├── access.log-20130719.gz │ ├── access.log-20130720.gz │ ├── access.log-20130721.gz │ ├── access.log-20130722.gz │ ├── error.log │ ├── error.log-20130616.gz │ ├── error.log-20130617.gz │ ├── error.log-20130621.gz │ ├── error.log-20130622.gz │ ├── error.log-20130628.gz │ ├── error.log-20130629.gz │ ├── error.log-20130702.gz │ ├── error.log-20130715.gz │ ├── error.log-20130716.gz │ ├── error.log-20130717.gz │ └── error.log-20130718.gz ├── pki.example.com │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130709.gz │ ├── access.log-20130714.gz │ ├── access.log-20130716.gz │ ├── access.log-20130719.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz └── srv1.example.com ├── access.log ├── access.log-20130616.gz ├── access.log-20130626.gz ├── access.log-20130627.gz ├── access.log-20130628.gz ├── access.log-20130706.gz ├── access.log-20130710.gz ├── access.log-20130712.gz ├── access.log-20130713.gz ├── access.log-20130714.gz ├── access.log-20130719.gz ├── access.log-20130720.gz ├── error.log ├── error.log-20130616.gz ├── error.log-20130626.gz ├── error.log-20130627.gz ├── error.log-20130628.gz └── error.log-20130710.gz 5 directories, 92 files Now it looks like: # tree /var/log/webs/ /var/log/webs/ ├── 00default │ ├── access.log │ └── error.log ├── crl.example.com │ ├── access.log │ └── error.log ├── ocsp.example.com │ ├── access.log │ └── error.log ├── pki.example.com │ ├── access.log │ └── error.log └── srv1.example.com ├── access.log └── error.log and without the previous rotated and compressed logfiles it is also working on that box. So there is a problem when there are rotated logs?! Now I moved back some logfiles. And it is working with: # tree /var/log/webs/ /var/log/webs/ ├── 00default │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── error.log │ └── error.log-20130616.gz ├── crl.example.com │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130619.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130627.gz │ ├── access.log-20130629.gz │ ├── access.log-20130704.gz │ ├── access.log-20130706.gz │ ├── access.log-20130711.gz │ ├── access.log-20130717.gz │ ├── access.log-20130718.gz │ ├── access.log-20130719.gz │ ├── access.log-20130720.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz ├── ocsp.example.com │ ├── access.log │ └── error.log ├── pki.example.com │ ├── access.log │ ├── access.log-20130616.gz │ ├── access.log-20130617.gz │ ├── access.log-20130618.gz │ ├── access.log-20130620.gz │ ├── access.log-20130621.gz │ ├── access.log-20130709.gz │ ├── access.log-20130714.gz │ ├── access.log-20130716.gz │ ├── access.log-20130719.gz │ ├── error.log │ ├── error.log-20130616.gz │ └── error.log-20130617.gz └── srv1.example.com ├── access.log ├── access.log-20130616.gz ├── access.log-20130626.gz ├── access.log-20130627.gz ├── access.log-20130628.gz ├── access.log-20130706.gz ├── access.log-20130710.gz ├── access.log-20130712.gz ├── access.log-20130713.gz ├── access.log-20130714.gz ├── access.log-20130719.gz ├── access.log-20130720.gz ├── error.log ├── error.log-20130616.gz ├── error.log-20130626.gz ├── error.log-20130627.gz ├── error.log-20130628.gz └── error.log-20130710.gz 5 directories, 57 files When I move back the logs from the ocsp web, logrotate will fail again. I think this should help you.
OK, the problem seems to be /var/log/webs/ └── ocsp.example.com └── access.log-20130722.gz If I remove just this file, logrotate will rotate all my nginx logs as expected and run the pre/postrotation actions. Note, today is 2013-07-22. Now, watch carefully: rotating pattern: /var/log/webs/*/*.log /var/log/nginx/*_log forced from command line (42 rotations) empty log files are not rotated, old logs are removed considering log /var/log/webs/00default/access.log log does not need rotating considering log /var/log/webs/00default/error.log log does not need rotating considering log /var/log/webs/crl.example.com/access.log log needs rotating considering log /var/log/webs/crl.example.com/error.log log does not need rotating considering log /var/log/webs/ocsp.example.com/access.log log needs rotating considering log /var/log/webs/ocsp.example.com/error.log log does not need rotating considering log /var/log/webs/pki.example.com/access.log log needs rotating considering log /var/log/webs/pki.example.com/error.log log does not need rotating considering log /var/log/webs/srv1.example.com/access.log log does not need rotating considering log /var/log/webs/srv1.example.com/error.log log does not need rotating considering log /var/log/nginx/error_log log needs rotating rotating log /var/log/webs/crl.example.com/access.log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' rotating log /var/log/webs/ocsp.example.com/access.log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' destination /var/log/webs/ocsp.example.com/access.log-20130722.gz already exists, skipping rotation rotating log /var/log/webs/pki.example.com/access.log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' rotating log /var/log/nginx/error_log, log->rotateCount is 42 dateext suffix '-20130722' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 4 files need rotation: - /var/log/webs/crl.example.com/access.log - /var/log/webs/ocsp.example.com/access.log - /var/log/webs/pki.example.com/access.log - /var/log/nginx/error_log Logrotate will begin with "/var/log/webs/crl.example.com/access.log". No problem. Logfile is beeng rotated. Next is "/var/log/webs/ocsp.example.com/access.log". Logrotate encounters an error: destination /var/log/webs/ocsp.example.com/access.log-20130722.gz already exists And see what logrotate also says: skipping rotation Now, instead of just skipping "/var/log/webs/ocsp.example.com/access.log", logrotate seems to skip remaining logfile (/var/log/webs/pki.example.com/access.log and /var/log/nginx/error_log will not be handled) and also pre/postrotating (due to this error).
(In reply to Thomas D. from comment #9) > Now, instead of just skipping "/var/log/webs/ocsp.example.com/access.log", > logrotate seems to skip remaining logfile > (/var/log/webs/pki.example.com/access.log and /var/log/nginx/error_log will > not be handled) and also pre/postrotating (due to this error). Sorry, I've been pretty busy until today. Thanks for the info. I get the same results here but I think the code is behaving correctly according to the condition about pre/post scripts in changeset 435 [1] This condition states: do the pre/post if requested and there are not errors when using sharedscripts option (our case). Since there is an error (the compressed logs already exists for access.log-20130722.gz) the post script is not executed. AFAIK upstream is going to release a new version shortly, so feel free to open a bug upstream if this behaviour does not satisfy you. [1] https://fedorahosted.org/logrotate/changeset/435
3.8.6 was released the other day but isn't in tree yet. Lets try it out when it lands.
logrotate-3.8.6 in the tree now.
Hi, with 3.8.6 (and the manually fixed error from c9), I don't see this error anymore. So from my view, I would call it fixed. Thanks Chema. Regarding c9 I am not sure if I will ask upstream. If logrotate will encounter an error it sounds right for me to stop. I'll check if logrotate will report this failure (e.g. via exit code?). If yes, everything seems fine for me. But anyway, this has nothing to do with this bug report. Again, thanks!
> Again, thanks! YW. Closing bug Cheers!