其他分享
首页 > 其他分享> > 定时任务

定时任务

作者:互联网

定时任务 crond

# 什么是crond
crond是一个服务,是定时任务的守护进程

定时任务的作用

1.系统级别的定时任务
临时文件清理
系统信息采集
日志文件切割
2.用户级别的定时任务
定时向互联网同步时间
定时备份系统配置文件
定时备份数据库的数据

定时任务语法

[root@zh ~]# vim /etc/crontab 
# 定时任务,支持bash命令
SHELL=/bin/bash
# 定时任务只支持直接写以下目录中的命令 (建议定时任务中的命令全部使用绝对路径)
PATH=/sbin:/bin:/usr/sbin:/usr/bin  建议:定时任务能不用命令就不用,最好使用脚本
# 定时任务执行过程中,如果有输出或者有报错,则通过邮件发给root用户
MAILTO=root

# For details see man 4 crontabs

# 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

语法:写定时任务上来就六亲不认写五颗星
*   *  *  *  *  用户  ls
分  时 日 月 周

切记 :定时任务最小单位分钟,无法精确到秒级

定时任务相关命令

crontab
-l :list列出当前定时任务的列表
-e :edit 编辑定时任务   vim /var/spool/cron/root
-r :remove 删除定时任务  (删除全部定时任务)
-u :user 指定定时任务的用户

定时任务实战

时间同步任务

  1. 需要下载时间同步命令

    yum install -y ntpdate

  2. 先测试命令是否可以在命令行执行成功

    [root@localhost ~]# ntpdate  time1.aliyun.com
    

  1. 编写定时任务

    [root@localhost ~]# crontab -e
    
  2. 写入规则 (复制刚刚执行成功的命令)

    * * * * * ntpdate  time1.aliyun.com
    

  1. 查找该命令绝对路径

    [root@localhost ~]# which ntpdate
    /usr/sbin/ntpdate
    

  1. 完善规则中的绝对路径

    * * * * * /usr/sbin/ntpdate  time1.aliyun.com
    

  1. 根据规定时间来进行定时任务编写

    * * * * * /usr/sbin/ntpdate  time1.aliyun.com
    
  2. 查看命令是否有输出,有则扔进黑洞

    * * * * * /usr/sbin/ntpdate  time1.aliyun.com  &>/dev/null
    
  3. 加上规范注释

    # Usage :时间同步  By :zh date:2022/05/11
    * * * * * /usr/sbin/ntpdate  time1.aliyun.com  &>/dev/null
    

  1. 查看定时任务日志(最开始定时任务每分钟执行一次)

    [root@localhost ~]# tail -f /var/log/cron 
    

每天凌晨3点做一次备份

需求 :每天凌晨3点做一次备份
将备份命令写入一个脚本里
任务 :
1.每天备份文件名要求格式 :2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求保留3天的数据
3.在执行计划任务时,不要输出任务信息
  1. 备份使用tar命令

    cd / && tar zcf 2018-02-20_hostname_etc.tar.gz etc
    

    实现包名加日期和主机名需求

    cd / && tar zcf `date +%F`_`hostname`_etc.tar.gz etc
    
  2. 将命令复制到脚本里

    [root@localhost ~]# vim baifen.sh
    
    #!/bash/bash
    cd / && tar zcf `date +%F`_`hostname`_etc.tar.gz etc
    
    
  3. 只保存3天的数据

    find $backup -type f  ! -mtime -3 | xargs rm -f
    
  4. 不输出任务信息(在定时任务里加上&>/dev/null)

  5. 优化脚本

    #!/bash/bash
    backup="/backup"
    mkdir -p $backup
    cd / && tar zcf $backup/`date +%F`_`hostname`_etc.tar.gz etc
    find $backup -type f  ! -mtime -3 | xargs rm -f
    

  1. 手动执行脚本

    [root@localhost ~]# sh baifen.sh 
    [root@localhost ~]# ls /backup/
    2022-05-11_localhost.localdomain_etc.tar.gz
    

  1. 编写定时任务

    crontab -e
    * * * * *  /bin/bash  /root/baifen.sh
    

    满足时间需求和不输出内容

    * 03 * * *  /bin/bash  /root/baifen.sh &>/dev/null
    

    加上注释

    # Usage : 备份etc   By :zh date :2022/05/11
    * 03 * * *  /bin/bash  /root/baifen.sh &>/dev/null
    

脚本最终内容

#!/bash/bash
backup="/backup"
mkdir -p $backup
cd / && tar zcf $backup/`date +%F`_`hostname`_etc.tar.gz etc
find $backup -type f  ! -mtime -3 | xargs rm -f

定时内容最终内容

# Usage : 备份etc   By :zh date :2022/05/11
* 03 * * *  /bin/bash  /root/baifen.sh &>/dev/null

备份定时任务内容

就是备份/var/spool/cron/用户名

[root@localhost ~]# cp /var/spool/cron/root /backup/root_cron

拒绝某个用户使用定时任务

[root@localhost ~]# vim /etc/cron.deny 
zh
# 只要将用户名写入 /etc/cron.deny 文件中 ,该用户无法使用定时任务

定时任务调试规则

# crond调试
1.调整任务每分钟频率,以便后续的调试
2.如果任务使用cron运行脚本,请将脚本的执行结果写入指定文件日志,观察日志内容是否正常
3.命令使用绝对路径,防止无法找到命令导致定时任务执行产生故障
4.通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试
# crond编写思路
1.手动执行命令,然后保留执行成功的结果
2.编写脚本
	脚本需要统一路径/scripts
	脚本内容复制执行成功的命令(减少每个环节出错几率)
	脚本内容尽可能的优化,使用一些变量或使用简单的判断语句
3.执行脚本
	使用bash命令执行,防止脚本没有增加执行权限
	执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
	加上必要的注释,人 、时间、任务
	设定计划任务执行周期
	粘贴执行脚本的命令(不要手敲)

Linux发邮件

  1. 安装发邮件工具mailx

    [root@localhost ~]# yum -y install mailx
    
  2. 配置发件人

    [root@localhost ~]# vim /etc/mail.rc 
    #编辑邮件配置文件
    [root@zls ~]# vim /etc/mail.rc
    #发件人
    set from=253097001@qq.com
    #邮件服务器
    set smtp=smtp.qq.com
    #发件人用户名
    set smtp-auth-user=253097001@qq.com
    #发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
    set smtp-auth-password=xxx
    #登录方式
    set smtp-auth=login
    #邮件服务器协议及端口
    set smtp=smtps://smtp.qq.com:465
    #忽略证书
    set ssl-verify=ignore
    #指定证书位置
    set nss-config-dir=/etc/pki/nssdb/
    
    
    set bsdcompat
    set bsdcompat
    set from=2646491240@qq.com
    set smtp=smtps://smtp.qq.com:465
    set smtp-auth-user=2646491240@qq.com
    set smtp-auth-password=erviwplvcfsmeacd
    set smtp-auth=login
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb/
    

配置邮箱

点击设置 >账户

开启POP3和IMAP服务

# 发送邮件
echo '内容' | mail -s '标题'  邮箱
[root@localhost ~]# echo '测试' | mail -s '测试' 2646491240@qq.com

使用定时任务发情书

  1. 创建情书存放目录

    mkdir /love
    
  2. 编写情书

    [root@localhost ~]# vim /love/1.txt
    [root@localhost ~]# vim /love/2.txt
    [root@localhost ~]# vim /love/3.txt
    [root@localhost ~]# vim /love/4.txt
    
  3. 编写发送情书的脚本

    #!/bin/bash
    love_dir="/love"
    love_name=`ls -1 $love_dir | head -1`
    
    cat $love_dir/$love_name | mail -s '情书' 2646491240@qq.com
    mv $love_dir/$love_name /opt
    ~                             
    

优化脚本

#!/bin/bash
love_dir="/love"
love_name=`ls -1 $love_dir | head -1`
aass='ls -1 /love/ | wc -l'
if [$aass -gt 0];then
        cat $love_dir/$love_name | mail -s '情书' 2646491240@qq.com
        mv $love_dir/$love_name /opt
fi

  1. 测试脚本发送

    root@localhost ~]# sh qingshu.sh 
    

  1. 编写定时任务

    * 03 * * *  /bin/bash  /root/qingshu.sh
    

标签:love,etc,任务,定时,root,localhost
来源: https://www.cnblogs.com/ghjhkj/p/16259513.html