ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

定时任务

2022-05-11 20:02:43  阅读:229  来源: 互联网

标签:love etc 任务 定时 root localhost


定时任务 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有