- 前言
- 一、自定义sh脚本:
- 二、Crontab 编辑定时任务
前言 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中。



