一次性任务
#1. 准备阶段-----------------------------------------------------------------
#rpm -q at 确认软件包已安装
[12:27:47 root@centos8 ~]#rpm -q at
at-3.1.20-11.el8.x86_64
#systemctl status atd 查看服务是否启动,一次性任务依赖此服务
[09:51:02 root@centos8 ~]#systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enable>
Active: active (running) since Tue 2021-06-15 09:47:35 CST; 2h 40min ago
#dnf -y install postfix 安装邮件服务
dnf -y install postfix
#systemctl enable --now postfix 启动邮件服务
systemctl enable --now postfix
#2. 创建阶段-----------------------------------------------------------------
#2.1 交互式
#2.2 标准输入重定向
echo `hostname` | at 14:30
#2.3 at -f file
at -f test-at.txt 14:30 2016-09-20
#3. 查看--------------------------------------------------------------------
#查看创建的计划任务
at -l
#查看指定计划任务的内容 ;编号:at -l 第一列数字
at -c 编号
#4. 控制谁可以创建-----------------------------------------------------------
#白名单(优先级最高):at.allow:默认不存在,只有该文件中的用户才能执行at命令
#黑名单:at.deny:默认存在,拒绝该文件中用户执行at命令
#如果两个文件都不存在,只有root可以执行at命令
vim /etc/at.deny
#注意:
# 1.标准输出和错误默认发送至邮箱,建议在执行任务时利用&>/dev/null消除邮件
周期性计划任务
crontab #crontab命令管理周期性计划任务
#1. 准备阶段-----------------------------------------------------------------
#cron依赖于crond服务,确保crond守护处于运行状态
#CentOS 7 以后版本
systemctl status crond
#CentOS 6
service crond status
#systemctl status postfix 查看邮件服务是否运行
systemctl status postfix
#修改默认的文本编辑工具
vim /etc/profile.d/env.sh
export EDITOR=vim
:wq
#2. 创建周期性计划任务--------------------------------------------------------
#创建计划任务中PATH变量特殊(PATH值只有:/usr/bin:/bin),需把PATH变量目录写在第一行或者写在脚本中
[21:19:59 root@centos8 ~]#echo $PATH
/apps/httpd/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#复制粘贴到第一行
crontab -e #编辑任务
PATH=/apps/httpd/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
*/5 * * * * /data/a.sh #表示步长为5 ,每天隔5分钟执行一次 ,文件必须提前存在且有执行权限(chmod +x a.sh)
crontab -e -u shichong #-u:指定哪个用户来执行
#3 查看---------------------------------------------------------------------
#列出所有任务
crontab -l
#tail -f 查看新的追加到文件的行( /var/log/cron #计划任务日志)
tail -f /var/log/cron
细节
1)PATH PATH=XXX 写在第一行,或者PATH写到脚本中
2)日期和星期几是或关系,如果想实现并且,在脚本里加判断实现
3)标准输出和错误默认发送至邮箱,建议在执行任务时利用&>/dev/null消除邮件
4)% 不要直接使用,有特殊含义
5) 格式最重要 *(分钟) *(小时) *(天) *(月) *(星期)
扩展
while true;do ls -l ;sleep 10;done #每十秒执行一次
watch -n10 #每隔10秒查看
mail #此处可以测试计划任务标准输出和错误输出发邮件给root
rm -f /var/spool/mail/root #删除root的邮件