定时任务
什么是定时任务
类似闹钟
Linux下面定时执行任务
备份
流量低谷期(人少的时候)
脚本/命令
定时任务分类
crontab (cronie)
工作必会
anacron
适用于 服务器非7*24小时运行
atd
一次性的定时任务
crontab 分类
系统的定时任务
配置文件
/etc/crontab
目录
etc/cron.daily
这个目录内容系统定时任务 会每天执行
etc/cron.hourly
这个目录内容系统定时任务 会小时执行
etc/cron.monthly
这个目录内容系统定时任务 会每月执行
etc/cron.weekly
这个目录内容系统定时任务 会每周执行
日志切割
系统定时任务+logroate
中毒
定时检查
存放在开机自启动
用户自己的定时任务
crontab -l
list
查看 当前用户的定时任务
crontab -e
edit
修改当前用户的定时任务
修改文件
crontab -l
cat /var/spool/cron/root
crontab -e
vi /var/spool/cron/root
定时任务格式
规则
什么时候做什么事
分时日月周 命令/脚本
特殊符号
*
每
/
每2分钟
每隔xxx分钟
*/ * * * *date>>/tmp/oldboy.txt
检查结果
看文件的内容
看日志
容易混淆(一样)
*/1 * * * *date>>/tmp/oldboy.txt 每隔一分钟
* * * * *date>>/tmp/oldboy.txt 每隔一分钟
1 * * * *date>>/tmp/oldboy.txt 每个小时的第一分钟
一样
-
01-23
,
01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23
定时任务日志
定时任务实际备份案例
#第1个里程碑-命令行测试 (测试命令是否ok)
#第2个里程碑-书写脚本并测试脚本
#第3个里程碑-写入定时任务 每分钟执行 检查
#第4个里程碑-写入定时任务 根据要求修改时间
书写脚本拍错
先运行里面的命令
运行脚本 显示脚本的执行过程
sh -x
带+号的就是脚本执行过程
加号越多越优先执行
每天晚上12点打包备份/etc目录到/tmp下
定时任务箴言(坑)
一定要加上1个·注释
书写定时任务的时候 尽量使用脚本
运行脚本使用sh
在定时任务中 %有特殊含义 相当于回车 加上撬棍(\)就可以了
定时任务中的命令/脚本 使用绝对路径
用户的定时任务
用户家目录下
系统定时任务
根下
在定时任务里面 每个命令脚本 定向到空 或追加到文件
写法
原因
故障案例
定时任务中运行脚本环境变量问题
使用命令用绝对路径
脚本开头 重新设置 PATH
. /etc/profile
或
source /etc/profile
每天晚上12点 打包备份/etc/目录到/tmp下面
#第1个里程碑-命令行测试 (测试命令是否ok)
#第2个里程碑-书写脚本并测试脚本
#第3个里程碑-写入定时任务 每分钟执行 检查
用-x 排查脚本执行的错误
#第4个里程碑-写入定时任务 根据要求修改时间 crontab -e
cat /var/spool/cron/root
修改当前用户的定时任务
crontab -l
vim/var/spool/cron/root
查看 当前用户的定时任务
定时任务日志默认存放在 /var/log/cron
tail -f /var/log/cron
跟踪日志与ll /tmp/下 压缩文件时间是一致的
带+的就是脚本的执行过程,+号越多越执优先行
在定时任务中最好加上注释#
添加脚本文件必须是绝对路径,如 /usr/bin/sh /server/scripts/bak-etc.sh
脚本文件最好重定向到空(黑洞/dev/null)或指定文件中。否则就会邮件服务开启时,不断地给root发邮件(you have new mail in /var/spool/mail/root); 邮件服务关闭时,发出的邮件临时堆积起来,
/var/spool/postfix/maildrop (这个目录下会有大量的小文件),会导致inode满了.
每分钟 显示当前系统的时间和ip地址 追加到 /tmp/ip.log中
date
ip a s eth0
绝对路径
定时任务中运行脚本环境变量问题
使用命令用绝对路径 如 /usr/bin/sh /server/scripts/bak-etc.sh
脚本开头 重新设置 PATH (PATH是变量配置中的是路径)
. /etc/profile
或
source /etc/profile
在脚本中命令可以逐条按顺序堆积,也可以一条命令;在定时任务中必须是一条命令书写.
使用变量定义
vim /server/scripts/kobe.sh
dir=ip a s eth0|awk -F"[ /]+" 'NR==3{print $3}'
mkdir -p /backup/
d
i
r
t
a
r
z
c
f
/
b
a
c
k
u
p
/
dir tar zcf /backup/
dirtarzcf/backup/dir-date +%F-%w
_tar.gz /etc/
rm -f find /backup/ -type f -mtime +6 ! -name "*1_tar.gz"