【1】、什么是定时任务
1.什么是定时任务
闹钟/每天定时 7点半 8点
在固定的时间做什么事情。
2.定时任务作用
固定时间时间同步
数据备份(备份的服务器) 重要的数据保留3份 公司备份服务器 笔记本 移动硬盘/网盘一份
先打包然后再备份(代码文件 上百个 上千个) 占用磁盘io 降低传输速度 i input o output
日常工作需求
日志切割 防止日志太大
/var/log/nginx.log
mv /var/log/nginx /var/log/nginx-2024-11-18.log
监控取值+监控
定时执行脚本
辅助程序运行
.....
【2】、系统定时任务
五颗星: 星和星之间必须有空格
* 分 0 - 59 01或者写1表示1分钟 0表示整点
* 时 0 - 23 00或者写0 表示凌晨12点
* 日 1 - 31
* 月 1 - 12 1-12月份,也可以使用英文表示月份 jan,feb,mar,apr ...
* 周 0 - 6 0或者7表示星期天
特殊符号表示时间:
* 表示每的意思 如果是五颗星表示每分钟都要执行一次定时任务
/ 表示间隔的意思 */5 或 */05 表示间隔5分钟执行一次
- 表示区间 7-11 表示上午7点到上午的11点
, 表示间隔 7-11,13-15 上午7点到11点和下午的1点到3点执行
配置文件: /etc/crontab
语法结构: * * * * * root 可执行的命令;命令
案例1.每5分钟执行一个echo oldboy >> oldboy.txt # 默认文件不写路径 则会在家目录生成/root/
*/5 * * * * root echo xu >> xu.txt
案例2.每小时的第5分钟执行一次定时任务
05 * * * * root cmd
# 注意05和*/5的区别
# 注意时间以整点来计算而不是当前时间 比如在当前03创建的定时任务 下次执行时间是05 1.05 1.10 1.15 1.20
案例3.每分钟执行一次定时任务
* * * * * root cmd
案例4. 上午的7-11点执行任务
* 7-11 * * * # 表示7点的每分钟和8-11点的每分钟都会执行 7.01 7.02
00 7-11 * * * # 表示7点 8点 9点 10点和11点执行一次
案例5.凌晨12点执行一个命令 笔试题
00 00 * * * root cmd # 表示凌晨12点
案例6.7-11,13-15 时间间隔使用
00 7-11,13-15 * * * root cmd
案例7.每分钟打包/etc/hosts /etc/passwd 名称为etc.tar.gz 放到/opt目录
* * * * * root tar zcvf /opt/etc.tar.gz /etc/hosts /etc/passwd
案例8.每分钟打包/etc/hosts /etc/passwd 名称为时间+etc.tar.gz放到/opt目录
# 注意定时任务不识别% 需要加\撬棍 或者将命令写入到脚本中,定时任务执行脚本
* * * * * root tar zcvf /opt/`date +\%F-\%H-\%M`etc.tar.gz /etc/hosts /etc/passwd
[root@kylin-xu opt]# ls
2024-11-18-12-37etc.tar.gz
[root@kylin-xu opt]# tar tf 2024-11-18-12-37etc.tar.gz
etc/hosts
etc/passwd
# 写入脚本执行
[root@kylin-xu opt]# mkdir /server/scripts -p
[root@kylin-xu opt]# cd /server/scripts/
[root@kylin-xu scripts]# vim etc.sh
cd /etc/
tar zcvf /opt/`date +%F-%H-%M`etc.tar.gz hosts passwd
[root@kylin-xu scripts]# vim /etc/crontab
* * * * * root bash /server/scripts/etc.sh
案例9.每间隔5分钟执行1次时间同步。
*/5 * * * * root ntpdate ntp2.aliyun.com
定时任务的日志文件 /var/log/cron
# 如果定时任务执行不成功可以通过查看日志来发现问题
Ubuntu
cron日志文件
/var/log/syslog
【3】、用户定时任务
配置文件:
/var/spool/cron/root # root就是root用户做定时任务的配置文件 默认是没有的
配置用户定时任务有两种方法:
第一种方法: 有语法检查的功能
crontab -e 直接回车 就是编辑的/var/spool/cron/root visudo -->/etc/sudoers
第二种方法: 直接vim编辑配置文件
vim /var/spool/cron/root
案例1.用户定时任务创建每分钟执行一个echo的动作
# 用户定时任务语法和系统定时任务语法 用户定时任务不需要加用户
[root@kylin-xu cron]# crontab -e
* * * * * echo test >> test.log
查看用户定时任务方法1:
[root@kylin-xu cron]# cat /var/spool/cron/root
* * * * * echo test >> test.log
查看用户定时任务方法2:
[root@kylin-xu cron]# crontab -l -u root
* * * * * echo test >> test.log
案例2.每5分钟执行一次时间同步
# 注意用户的定时任务默认识别的PATH变量只有/usr/bin和/bin路径 需要重新配置PATH变量
*/5 * * * * ntpdate ntp2.aliyun.com
[root@kylin-xu cron]# crontab -l -u root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
* * * * * echo test >> test.log
* * * * * ntpdate ntp2.aliyun.com &>> /root/cron.log
注意:想要保留定时任务的结果定向到文件中
* * * * * ntpdate ntp2.aliyun.com &>>/root/cron.log
如果不想保留结果
* * * * * ntpdate ntp2.aliyun.com &>/dev/null
注意: 使用centos,如果关闭了邮件服务,每执行一次定时任务,会自动生成一个小文件,小文件会占用inode号码
[root@linuxn ~]# systemctl stop postfix
定时清理下面目录:
/var/spool/postfix/maildrop/
或者将定时任务执行的结果定向到文件或者空