Cron 작업을 사용하여 Ubuntu 시스템을 자동으로 정리하려고 합니다.
나는 이것을 단순화하려고 노력하고 있습니다 :
sudo find /var/log -type f -name "*.1.gz" -delete
sudo find /var/log -type f -name "*.2.gz" -delete
sudo find /var/log -type f -name "*.3.gz" -delete
sudo find /var/log -type f -name "*.4.gz" -delete
,etc...
아래와 같이 명령어를 입력했는데 작동하지 않는데, 제가 잘 몰라서 그런 것 같습니다...
for i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
비슷한 것을 시도했지만 그것도 작동하지 않습니다...:
$i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
i=[^0-9]; sudo find /var/log -type f -name "*.$i.gz"
i=[^0-9]+$; sudo find /var/log -type f -name "*.$i.gz"
마지막 4개에 대한 출력이 표시되지 않습니다... 누군가 오류를 생성합니다...
그렇다면 올바른 명령/구문은 무엇입니까?
"미니" 서버를 깨끗하게 유지하기 위한 다른 아이디어가 있습니까?
기타 질문: 실행하면 "/usr/share/doc/libruby1.9.1/NEWS-1.8.7.gz" sudo find / -type f -name "*.7.gz"
가 나타납니다.
나는 이것으로 그것을 해결할 수 있습니다 :
실행하는 경우: 하지만 확장 기능 및 기타 많은 항목이 sudo find / -type f -name "*log.7.gz"
포함된 항목은 건너뛸 것입니다 .*error.(0-9).gz
오래된 로그를 정리하는 아이디어/다음과 같은 찾기/제거는 없습니다: "/usr/share/doc/libruby1.9.1/NEWS-1.8.7.gz"
편집하다
내 /etc/logrotate.d에는 다음이 있습니다.
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
/var/log/apport.log {
daily
rotate 7
delaycompress
compress
notifempty
missingok
}
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/aptitude {
rotate 6
monthly
compress
missingok
notifempty
}
/var/log/cups/*log {
daily
missingok
rotate 7
sharedscripts
prerotate
if [ -e /var/run/cups/cupsd.pid ]; then
invoke-rc.d --quiet cups stop > /dev/null
touch /var/run/cups/cupsd.stopped
fi
endscript
postrotate
if [ -e /var/run/cups/cupsd.stopped ]; then
rm /var/run/cups/cupsd.stopped
invoke-rc.d --quiet cups start > /dev/null
sleep 10
fi
endscript
compress
notifempty
create
}
/var/log/dpkg.log {
monthly
rotate 12
compress
delaycompress
missingok
notifempty
create 644 root root
}
/var/log/alternatives.log {
monthly
rotate 12
compress
delaycompress
missingok
notifempty
create 644 root root
}
# - I put everything in one block and added sharedscripts, so that mysql gets
# flush-logs'd only once.
# Else the binary logs would automatically increase by n times every day.
/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log {
daily
rotate 7
missingok
create 640 mysql adm
compress
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
# If this fails, check debian.conf!
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
# Really no mysqld or rather a missing debian-sys-maint user?
# If this occurs and is not a error please report a bug.
#if ps cax | grep -q mysqld; then
if killall -q -s0 -umysql mysqld; then
exit 1
fi
else
$MYADMIN flush-logs
fi
endscript
}
/var/log/pm-suspend.log /var/log/pm-powersave.log {
monthly
rotate 4
delaycompress
compress
notifempty
missingok
}
/var/log/ppp-connect-errors {
weekly
rotate 4
missingok
notifempty
compress
nocreate
}
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || 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
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/speech-dispatcher/speech-dispatcher.log /var/log/speech-dispatcher/speech-dispatcher-protocol.log {
daily
compress
missingok
sharedscripts
rotate 7
postrotate
/etc/init.d/speech-dispatcher reload >/dev/null
endscript
}
/var/log/speech-dispatcher/debug-epos-generic /var/log/speech-dispatcher/debug-festival /var/log/speech-dispatcher/debug-flite {
daily
compress
missingok
sharedscripts
rotate 2
postrotate
/etc/init.d/speech-dispatcher reload >/dev/null
endscript
}
/var/log/ufw.log
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog reload >/dev/null 2>&1 || true
endscript
}
/var/log/unattended-upgrades/unattended-upgrades.log
/var/log/unattended-upgrades/unattended-upgrades-shutdown.log
{
rotate 6
monthly
compress
missingok
notifempty
}
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
/var/log/vsftpd.log
{
create 640 root adm
# ftpd doesn't handle SIGHUP properly
missingok
notifempty
rotate 4
weekly
}
그리고 /etc/logrotate.conf에서:
# see "man logrotate" for details
# rotate log files weekly
weekly
# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be configured here
예당 최대 100,000개의 모든 로그를 3회 순환하도록 설정할 수 있나요? 어떻게? 이 구성을 사용하여 저장할 수 있는 최소 로그 수는 얼마입니까?
답변1
여기서는 for 루프를 사용할 필요가 없습니다 find
. 다음을 사용하면 됩니다.
sudo find /var/log/ -type f -regex '.*\.[0-9]+\.gz$' -delete
그러나 제안한 대로 확인하세요.매뉴얼 페이지logrotate
파일 수를 줄이는 방법을 알아보세요.