Linux计划任务:
计划任务分为两类:
- 未来某个时间执行一次任务: at batch
- 周期性运行某个任务: crond
at命令
[root@test ~]# at --help
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
at [-V] [-q x] [-f file] [-mMlbv] -t time
at -c job ...
atq [-V] [-q x]
at [ -rd ] job ...
atrm [-V] job ...
batch
用法说明: at [options] [time|batch] [job]
options:
-f : 指定执行文件
times:
HH:MM [YY-mm-dd]
moon,midnight…
tomorrow
now+#[min,hours,seconds…]
batch命令:
让系统自动选择空间时间去执行指定任务
实例:
cat 1.sh
echo “hello”
at now +1 minutes -f 1.sh # 在1分钟后执行1.sh文件里的内容
atq命令: 可以去查看当前的任务队列
3 Thu Feb 13 03:16:00 2020 a root
crond服务
Linux系统则是由crond服务来控制的;在Linux系统上面非常多的计划任务
都基本采用crond方式,因此crond服务默认是开机自启的;另外,由于用户可以自定义计划任务,所以提供了crontab命令
Linux下的任务调度分为两类:
系统任务调度
用户任务调度
系统任务调度:
系统周期性要执行的工作,比如定期写系统数据到磁盘中
[root@test ~]# systemctl status crond # 查看crond服务是正常运行的
[root@test ~]# cat /etc/crontab 就是系统任何调度的配置文件
SHELL=/bin/bash # 默认系统调度任务采用的shell程序
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 默认系统调度任务采用的命令路径
MAILTO=root # 默认本地邮件服务用户
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
举例: 执行用户root 执行任务: echo “hello”
时间表示法:
- 特定值
给定时间有效取值范围的值
- *
给定时间上有效取值范围的所有值,表示“每…”
实例1: root用户在每天晚上9.30执行指定任务
30 21 * * * root echo “hello”
- 离散取值
#,#,# …
实例2: root用户在每周一周五晚上8点执行执行任务
0 20 * * mon,fri root echo “hello”
- 连续取值
实例3: zhangsan用户在每个月1-9晚上8点执行任务
0 20 1-9 * * zhangsan echo “准备还花呗”
- 在执行时间范围上,定义步长
/# : 指定步长
实例4: zhangsan每5分钟执行指定任务
*/5 * * * * zhangsan echo “hi”
* */3 * * * zhangsan echo.sh # 每3小时执行一次
用户任务调度:
crontab命令定义:每个用户都有专用的crontab文件: /var/spool/crond/Username
crontab命令:
[root@test cron]# crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
常用参数:
-u user: 指定执行用户,默认是root
-l: 列出任务列表
-e: 便器任务
-r: 移除任务
-i: 同-r参数,交互式
实例:
[root@test cron]# crontab -e # 将计划任务写到指定文件中
[root@test cron]# cat /var/spool/cron/root
* * * * * echo "hello"
计划任务场景:
日志: 只保留7天内的日志(使用计划任务在每天0点删除7天前的日志即可)
* * * * * find /var/log/java/*.log -atime 7 -delete | -exec rm -rf {};
备份: 备份指定数据/mydata/
10 0 * * * tar -czxf /backup/mydata.zip.tar /mydata/