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