任务计划管理
1.任务计划
通过任务计划,可以让系统自动的按时间或周期性任务执行任务
1)环境准备:
yum -y install psotfix
systemctl enable --now psotfix
2)执行一次任务
- at 指定时间,执行一次任务
- batch 系统自行在空闲的时候执行一次任务
周期性运行任务
- cron
2.at工具
1)查看当前要执行的任务
[root@centos7 ~]# at -l
2)修改配置文件/etc/at.deny可以使某用户禁止创建计划任务
例:
[root@centos7 ~]# vim /etc/at.deny
wang
3)at命令用法:
at [option] TIME
4)注意:
- 作业执行命令的结果中的标准输出和错误以执行任务的用户身份发邮件通知给 root
- 默认CentOS 8 最小化安装没有安装邮件服务,需要自行安装
5)删除指定的N号作业
at -d N
6)查看具体N任务
at -c N
7)at时间格式
- HH:MM 在今日的HH:MM进行,若该时刻已过,则明天此时执行任务
- HH:MM YYYY-MM-DD 规定在某年某月的某一天的时刻执行该任务
- HH:MM[amlpm][Mouth][Date]
6pm Marth 17
17:20 tommorrow
8)at执行方式
- 交互式
- 输入重定向
- at -f file 将任务写在文件里at -f执行
9)白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令,且优先级高于/etc/at.deny
10)启用atd服务
[root@centos7 ~]# systemctl start atd
3.周期性任务计划cron
1)启用crond服务
[root@centos7 ~]# systemctl start crond [root@centos7 ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-03-20 20:31:34 CST; 23min ago Main PID: 1037 (crond) Tasks: 1 CGroup: /system.slice/crond.service └─1037 /usr/sbin/crond -n Mar 20 20:31:34 centos7.localdomain systemd[1]: Started Command Scheduler. Mar 20 20:31:34 centos7.localdomain crond[1037]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 73% if used.) Mar 20 20:31:36 centos7.localdomain crond[1037]: (CRON) INFO (running with inotify support)
2)crontab --help
3)计划任务cron的文件格式配置文件
[root@centos7 ~]# cat /etc/crontab
例:30 2 * * * #每天2:30
例:*/10 * * * * 每10分钟执行一次
例:0 2 1-5,10,20 1-6 0,6
4)cron计划任务存放在/var/spool/cron中
5)cron任务的PATH变量平时的不一样很少
例:
[root@centos7 cron]# crontab -e * * * * * echo $PATH > /data/log
这会导致很多命令不能被找到
解决方法一:
在脚本上加一个PATH变量
解决方法二:
在创建cron计划时将PATH加上
:r! echo $PATH
6)删除计划任务
[root@centos7 cron]# crontab -r
7)设置以谁的身份执行cron
crontab -u wang -e
8)面试题:11月每天的6-12点之间每隔2小时执行/app/bin/test.sh
[root@centos8 ~]#crontab -l 0 6-12/2 * 11 * /app/bin/test.sh
9)注意:cron任务中不建议使用%,它有特殊用途它表示换行的特殊意义,且第一个%后的所有字符串会被当成命令的标准输入,如果在命令中要使用%,则需要\转义。