定时任务的创建:crontab -e 进入任务编辑状态
* 代表所有的取值范围内的数字
/ 代表每的意思,/5表示每5个单位
- 代表从某个数字到某个数字
, 分开几个离散的数字
* * * * * 命令
分 时 日 月 周
0 4 1 1 * 1月1日早上4点
0 */2 * * * 每2个小时
0 23-7/2 * * * 晚上11点到早上7点之间每两个小时
0 11 4 * 1-3 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
2 1 * * * echo-server 每天1:02执行echo-server程序
*/2 * * * * echo-server 每2分钟执行echo-server程序
执行结果会被发送到root的邮件里,如果不想收到定时任务的信息
You have new mail in /var/spoll/mail/root
可以把输出重定向
*/2 * * * * echo-server > /dev/null 2>&1
企业中使用定时任务,以天为单位对日志进行备份
- 书写备份日志的脚本
- crontab -e启动定时任务
一般是运维工作人员负责Nginx日志管理。
实际应用:定时任务完成Nginx日志切割
解决方案:定时任务 + shell脚本 ( nginx信号管理 + 日志按日期存储 )
分析思路:
凌晨00:00:01,把昨天的日志重命名,放在相应的目录下
再USR1信号控制nginx重新生成新的日志文件
[root@localhost nginx] date -d yesterday
2018年 12月 13日 星期四 18:47:19 CST
[root@localhost nginx] date -d yesterday +%Y-%m-%d
2018-12-13
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/access.log # src
BASEPATH=/data/$(date -d yesterday +%Y-%m) # dst
mkdir -p $BASEPATH # 以“年月”创建目录
DATE=$(date -d yesterday +%d-%H:%M) # 日-时:分
bak=$BASEPATH/$DATE.access.log
mv $LOGPATH $bak
touch $LOGPATH
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`