我目前有一个服务器没有每天轮换日志是故意的。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