在回应 哪里还有这本书 "Shell Programming 333个应用範例技巧大全集?" 时,回去翻自己过去常用的一些资源,有些在装系统的时候还会拿出来用一用,有些是好久没有去造访了;在此就把一些自己在系统管理上,或说在Command Line环境下,常会用的一些工具或资源,备忘出来,省得往旧机器里面找资料。
newsyslog
这是我最常用也觉得最好用的shell script,是 Solaris 上都会有的一个 log rotate 的script,
通常在 Solaris 里是在:/usr/lib/newsyslog ,基本上内容都是长这个样子:http://web.mit.edu/shutkin/MacData_1124b/afs/net/system/sun4c_41/rsp.01/usr/lib/newsyslog。
虽然有 logrotate, cronlog 等现成的工具,但自己希望做到每天一个档,像 access.log.20090520 ,就比较不容易或麻烦,甚至要改 apache 上相关 log 的设定,而只要改写 newsyslog 成为:
#!/bin/shLOGDIR=/where/nginx/logsif test -d $LOGDIRthen cd $LOGDIR for LOG in access.log error.log do if test -s $LOG then test -f $LOG && mv $LOG $LOG.`date +%Y%m%d` /bin/cp -f /dev/null $LOG chmod 644 $LOG fi donechown nginx.nginx access.log error.log#chmod 644 access.log error.logfikill -HUP `cat /var/run/nginx.pid`
然后再用 crontab 中,每天晚上12点前来rotate,就可以每天一个档了。
58 23 * * * /where/my/newsyslog 2>&1
所以不管在任何版本的 Linux, Unix, Solaris, BSD,此 script 都适用。
常指定在有查询log需要,且每天的量也较大时,这样的分档就很方便。
当要查某字串,是否在哪些天里有,透过 grep, fgrep, egrep 抓出来。
较常用在 mail log,procmail log, spam filter log, web log。
若有邦友对 logrotate, cronlog 或其他相关 log rotate 的程式,也可以容易地来做出以日期来区别的话,也请分享一下其作法。