Cron 进程在 Logrotate 中无限期挂起

Cron 进程在 Logrotate 中无限期挂起

我目前有一个服务器没有每天轮换日志是故意的。logrotate本身很可能就是导致我的cron进程挂起的原因。

每次运行后我都必须手动终止该进程cron,以便它可以在第二天再次运行。

[root@localhost ~]# ps aux | grep cron
root     15364  0.0  0.0 116884  1304 ?        Ss   Sep12   0:03 crond
root     17898  0.0  0.0  19060   972 ?        Ss   Sep13   0:00 /usr/sbin/anacron -s
root     17911  0.0  0.0 106112  1272 ?        SN   Sep13   0:00 /bin/bash /usr/bin/run-parts /etc/cron.daily
root     17915  0.0  0.0 106112  1140 ?        SN   Sep13   0:00 /bin/sh /etc/cron.daily/logrotate
root     17916  0.0  0.0 105968   900 ?        SN   Sep13   0:00 awk -v progname=/etc/cron.daily/logrotate progname {?????   print progname ":\n"?????   progname="";????       }????       { print; }
root     22439  0.0  0.0 103320   856 pts/0    S+   09:53   0:00 grep cron

从日志中可以看出,该作业已被另一个作业锁定anacron

[root@localhost ~]# tail /var/log/cron
Sep 16 09:01:01 localhost run-parts(/etc/cron.hourly)[22374]: starting 0anacron
Sep 16 09:01:01 localhost anacron[22386]: Anacron started on 2016-09-16
Sep 16 09:01:01 localhost anacron[22386]: Job `cron.daily' locked by another anacron - skipping
Sep 16 09:01:01 localhost anacron[22386]: Normal exit (0 jobs run)
Sep 16 09:01:01 localhost run-parts(/etc/cron.hourly)[22388]: finished 0anacron
Sep 16 09:10:01 localhost CROND[22393]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 16 09:20:01 localhost CROND[22400]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 16 09:30:01 localhost CROND[22409]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 16 09:40:01 localhost CROND[22421]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 16 09:50:01 localhost CROND[22432]: (root) CMD (/usr/lib64/sa/sa1 1 1)

已经检查了配置文件,logrotate.d一切似乎正常,什么可能导致我的 cron 悬而未决?

答案1

--debug通过使用或选项从命令行手动运行 logrotate 命令来调试 logrotate 配置,--verbose以查看它挂起的位置和原因。

答案2

logrotate显然有人留下了以下配置的squid 配置文件:

/dir/user/logs/squid/* {
    weekly
    rotate 5
    compress
    notifempty
    missingok
    sharedscripts
    postrotate
      # Asks squid to reopen its logs. (log_rotate 0 is set in squid.conf)
      # errors redirected to make it silent if squid is not running
      /usr/sbin/squid -k rotate 2>/dev/null
      # Wait a little to allow Squid to catch up before the logs is compressed
      sleep 1
    endscript
}

该配置的问题在于,它会轮换每个文件,包括已压缩的文件,从而留下数百万个多次压缩的文件及其子文件。配置应该包括以下内容,*.log*而不是全部*

/dir/user/logs/squid/*.log

相关内容