=================================================
本文为HeYuanHui原作
转载必须确保本文完整并完整保留原作者信息及本文原始链接!
NN: khler
E-mail: khler@163.com
QQ: 23381103
MSN: pragmac@hotmail.com
=================================================
最近在Linux下实现一个服务,名为tws,它利用syslog输出日志,利用mysql作为后台数据库。此间碰到了两个问题,浪费了相当相当相当(印象实在太深刻了:)...)长的时间才得以解决,现记录于此,希望能够帮到与我有同样问题的朋友,节约宝贵时间。
一、日志输出及自动备份脚本:
通过cron服务,我们可以实现定时执行脚本,我这里当然是每天定时执行twslogbaker.sh脚本,备份我的tws产生的日志信息,我把它放在了tws服务的可执行文件同目录下,这当然是个普通的目录,结果让人郁闷的是,手动执行此脚本没问题,cron定时执行时,syslog不能向新产生的tws.log文件中写入信息...
具体做法是:
1、输出日志:
在我的tws服务里面,启动时调用: openlog("tws", LOG_NDELAY,LOG_USER);退出前调用: closelog();中间输出日志: syslog(LOG_INFO|LOG_LOCAL6, "%s", buff);
然后在/etc/syslog.conf(如果是ubuntu,在/etc/rsyslog/下添加.conf文件,具体参见ubuntu的rsyslog文档)
tws.* /usr/local/twslog/tws.log
2、定时备份:
在/etc/crontab中加入:59 23 * * * root /usr/sbin/twslogbaker.sh,这样每天晚上的23点59分执行/usr/sbin/下的脚本twslogbaker.sh。
twslogbaker.sh脚本是用来备份tws.log日志的,脚本内容:
# 当前日期
currdate=$( date +%Y-%m-%d )
# 日志路径
path="/usr/local/twslog"
# 原始文件
orgfile="tws.log"
# 新文件
dailyfile="$currdate.log"
echo "---> Log path: '$path'"
echo "---> Starting bak '$orgfile' to '$dailyfile' ..."
# Is 'tws.log' file exist?
#if [ ! -r $logfile ]
if [ -r $path/$orgfile ]
then
# bake up log file
echo "---> rename '$orgfile' to '$dailyfile'"
mv $path/$orgfile $path/$dailyfile
else
echo "---> file '$orgfile' not exist!"
fi
# empty tws.log
#echo "---> create '$orgfile' file"
touch $path/$orgfile
#chown root $path/$orgfile
chmod 666 $path/$orgfile
以前没有将twslogbaker.sh脚本放在/usr/sbin/下,导致备份完后syslog不能往新的tws.log文件中写入内容,放到/usr/sbin/就可以了,是因为权限的问题吗?到现在还不是很清楚,知道的兄弟给解释一下 :)
二、mysql重置密码:
参照了这篇文章:
http://sundful.javaeye.com/blog/704337
最后一步即pkill的时候一定要注意,你首先打开的不一定是pts/0,也可能是pst/1、pst/2...,所以,最保险的方法是:直接关闭那个命令窗口就行了。我之前pkill的时候可能没有正确执行,导致重置了密码后任然不能登录,一样的“Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题”,弄得我头大...