前言
1.实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储 分析思路: 凌晨00:00:01,把昨天的日志重命名,放在相应的目录下。 再USR1信息号控制nginx重新生成新的日志文件。 Crontab 编辑定时任务。一、自定义sh脚本:
vim runlog.sh
#!/bin/bash
#LOGPATH 为 要备份的日志源目录
#BASEPATH 为 存储备份日志的目录
LOGPATH=/usr/local/nginx/logs/131test_access.log
BASEPATH=/data/nginx/logs/$(date -d yesterday +%Y%m%d)
# 新建文件夹 这里是安年月日来分
mkdir -p $BASEPATH
# 构建备份日志文件名
filename=$BASEPATH/$(date -d yesterday +%H%M).131test_access.log
#移动日志文件到备份目录下
mv $LOGPATH $filename
touch $LOGPATH
#使用USR1信息号控制nginx重新生成新的日志文件
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
二、Crontab 编辑定时任务
Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
而 linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
crontab命令主要有3个参数:
-e :编辑用户的crontab。
-l :列出用户的crontab的内容。
-r :删除用户的crontab的内容。
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
crontab -l用来查看自己的crontab文件内能,crontab -r删除自己的crontab。
语法
crontab [ -u user ] file
或
crontab [ -u user ] { -l | -r | -e }
基本格式 :
- * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
00 01 * * * /xxx/runlog.sh >/dev/null 2>&1 每天1时0分(建议在01-04点之间,系统负载小)
# 下面是列子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
每半小时同步一下时间
注意清理系统用户的邮件日志
每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
例如,可以在crontab文件中设置如下形式,忽略日志输出:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。
crontab的日志主要是查看定时任务运行问题
更好的做法是,将信息写入指定文件中,方便查看
0 6 * * * /usr/bin/php test.php >> /home/log/crontab/mylog.log 2>&1
把错误和标准输出都写入到mylog.log中。