一次性任务、周期性任务

200 阅读3分钟

一次性任务

#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的邮件