我有一个Ubuntu(9.04 / Jaunty)服务器VPS,这是不正确的旋转syslogs。
以下是我目前检查的内容:
test -x /usr/sbin/syslogd-listfiles , test -x /sbin/syslogd , test -f /usr/share/sysklogd/dummy ) sudo run-parts --verbose /etc/cron.daily )手动运行cron.daily作业时,日志按照我的预期旋转 任何人有什么想法,我可能会尝试下一个或我可能会失踪? 我在想,或许sysklogd似乎正在运行它的过程作为系统日志(syslogd的所有者为每个ps -C syslogd -o user= | head -n 1 )意味着有某种权限问题,似乎要运行sudo -u syslog run-parts --verbose /etc/cron.daily的结果来支持这个结果,这个结果是一堆权限错误,但是我不确定最好的解决方法是什么。
以下是我的sysklogd文件的内容,如果有帮助的话。 touch /etc/crontouchtest位是我插入来validation文件何时运行成功。 它更新最后使用的时间( ls -lut /etc/crontouchtest ),当我以root身份执行运行部分时,而不是在cron.daily运行时。
#! /bin/sh # sysklogd Cron script to rotate system log files daily. # # If you want to rotate other logfiles daily, edit # this script. An easy way is to add files manually, # to add -a (for all log files) to syslogd-listfiles and # add some grep stuff, or use the -s pattern argument to # specify files that must not be listed. # # This is a configration file. You are invited to edit # it and maintain it on your own. You'll have to do # that if you don't like the default policy # wrt. rotating logfiles (ie with large logfiles # weekly and daily rotation may interfere). If you edit # this file and don't let dpkg upgrade it, you have full # control over it. Please read the manpage to # syslogd-listfiles. # # Written by Martin Schulze <[email protected]>. # $Id: cron.daily,v 1.14 2007-05-28 16:33:34 joey Exp $ test -x /usr/sbin/syslogd-listfiles || exit 0 test -x /sbin/syslogd || exit 0 test -f /usr/share/sysklogd/dummy || exit 0 touch /etc/crontouchtest USER=$(ps -C syslogd -o user= | head -n 1) [ -z "${USER}" ] && USER="root" || true set -e cd /var/log logs=$(syslogd-listfiles) test -n "$logs" || exit 0 for LOG in $logs do if [ -s $LOG ]; then savelog -g adm -m 640 -u ${USER} -c 7 $LOG >/dev/null fi done # Restart syslogd # /etc/init.d/sysklogd reload-or-restart > /dev/null
编辑
按要求输出:
ls -la /etc/cron.daily (run as root) drwxr-xr-x 2 root root 4096 Oct 23 07:13 . drwxr-xr-x 107 root root 4096 Oct 23 07:14 .. -rwxr-xr-x 1 root root 314 Feb 10 2009 aptitude -rwxr-xr-x 1 root root 111 May 11 11:49 backup-manager -rwxr-xr-x 1 root root 89 Jan 26 2009 logrotate -rwxr-xr-x 1 root root 1334 Oct 22 09:35 sysklogd ps -ef | egrep '[c]ron' (run as root) root 13369 1 0 Oct21 ? 00:00:02 /usr/sbin/cron
编辑2
各自的path
从echo $PATH (在切换到root之后):
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
从/etc/crontab :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
触摸/ etc / crontouchtest位是我插入来validation文件何时运行成功。 它更新最后使用的时间(ls -lut / etc / crontouchtest),当我以root身份执行运行部分时,而不是在cron.daily运行时。
如果我正确读取,那么当cron运行cron.daily任务时, /etc/crontouchtest不会得到更新。 这加上/etc/cron.daily/sysklogd在手动启动时正确运行这一事实,使我怀疑有些东西导致run-parts无法在run-parts启动时启动/etc/cron.daily/sysklogd由cron运行。
由于cron以root用户身份运行,而且您的手动testing也以root用户身份运行,所以两种环境之间的差别很小。 我所能想到的是,与命令行中存在的PATH相比, cron可能运行的是不同的PATH。 另外,当一个进程由cron运行时,没有控制tty。 这些差异可以解释结果的差异吗?
回答这个问题,使解决scheme更容易find。
默认的sysklogd cron作业首先检查anacron,如果找不到系统日志的日志轮转。 作为@Stevenbuild议我从系统中删除anacron(因为它是一个服务器,并打算在24/7/365,anacron的function并不是真的需要)。 一旦anacron离开系统,cron作业中的anacrontesting就会失败,系统日志的转动就像一个冠军一样。
谢谢@Steven