zoukankan      html  css  js  c++  java
  • 定时任务与计划任务

    定时任务
    定时执行我们预先设置的指令
     
    定时任务:
    一次性计划任务
    周期性计划任务
     
    一次性计划任务:执行单个任务之后就会自动退出
    1. at
    需要下载
     
    第一步:下载at一次性计划任务
    [root@ken2 ~]# yum install at -y
     
    第二步:启动atd服务并设置为开机自启
    [root@ken2 ~]# systemctl restart atd
    [root@ken2 ~]# systemctl enable atd
     
    常用选项:
    -l 列出at一次性计划任务
    -r 删除一次性计划任务
    -d 删除一次性计划任务
    -c 查看计划任务详情
     
    atq  列出at一次性计划任务
    atrm 删除一次性计划任务
     
    例子1:在14:41分在/tmp目录下创建test文件
     
    第一步:设置计划任务
    [root@ken2 ~]# at 14:41   #at使用格式at 时间
    at> touch /tmp/testat     #CMD1
    at> mkdir /tmp/test       #CMD2
    at> <EOT>                 #按住ctrl d
    job 1 at Mon Jul 15 14:41:00 2019
     
    第二步:查看at计划任务
    方法一:
    [root@ken2 ~]# at -l
    1Mon Jul 15 14:41:00 2019 a root
     
    方法二:
    [root@ken2 ~]# atq
    1Mon Jul 15 14:41:00 2019 a root
     
     
    第三步:再次查看计划任务
    [root@ken2 ~]# atq     #一次性计划任务执行成功之后就会退出
    [root@ken2 ~]# ls /tmp  #计划任务已经生效
    testat
     
    怎么删除计划任务那?
     
    [root@ken2 ~]# at 14:56
    at> ls /root           
    at> touch /tmp/test1
    at> <EOT>
    job 2 at Mon Jul 15 14:56:00 2019
    [root@ken2 ~]# at 14:57
    at> ls
    at> <EOT>
    job 3 at Mon Jul 15 14:57:00 2019
    [root@ken2 ~]# at 14:58
    at> whoami
    at> <EOT>
    job 4 at Mon Jul 15 14:58:00 2019
    [root@ken2 ~]# atq
    2Mon Jul 15 14:56:00 2019 a root
    3Mon Jul 15 14:57:00 2019 a root
    4Mon Jul 15 14:58:00 2019 a root
     
    删除计划任务:
    [root@ken2 ~]# atq
    2Mon Jul 15 14:56:00 2019 a root
    3Mon Jul 15 14:57:00 2019 a root
    4Mon Jul 15 14:58:00 2019 a root
    [root@ken2 ~]# atrm 2
    [root@ken2 ~]# atq
    3Mon Jul 15 14:57:00 2019 a root
    4Mon Jul 15 14:58:00 2019 a root
     
    查看计划命令详情:
    [root@ken2 ~]# at -c 5
     
    [root@ken2 ~]# at now +10minute
     
    周期性计划任务
     
    定期周期性的执行预先设定的指令
     
    crond服务实现了周期性计划任务,需要确保crond服务正在运行,一般系统已经默认开启自启
     
    第一步:查看crond是否正在运行:
    [root@ken2 ~]# ps aux | grep crond
    root        734  0.0  0.0 126284   408 ?        Ss   14:31   0:00 /usr/sbin/crond -n
     
    第二步:如果系统当中没有周期性计划任务:
    yum install cronie -y
     
    第三步:启动计划任务:
    systemctl restart crond
     
    第四步:查看crond生成文件
    [root@ken2 ~]# rpm -ql cronie
     
    crond主文件
     
    [root@ken2 ~]# vim /etc/crontab 
     
    SHELL=/bin/bash   #指定shell解释器
    PATH=/sbin:/bin:/usr/sbin:/usr/bin  #指定命令在哪些路径下查找,计划任务命令需要写绝对路径!
    MAILTO=root  #发送邮件接收的用户/var/spool/mail/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
     
    * 指定分钟0-59
    * 执行小时0-23
    * 天 1-31
    * 月1-12
    * 星期几 0-6
    CMD
     
    注意:crond最小的执行的单位是分钟!
     
    例子1:
    * * * * * /usr/sbin/reboot#每天每分钟执行一次重启系统任务
     
    例子2:凌晨三点钟执行一次系统重启任务
     
    错误写法:
    * 3 * * * /usr/sbin/reboot
    注意:表示每天的三点钟开始,会执行60次系统重启
     
    正确写法:
    0 3 * * * /usr/sbin/reboot
    总结:在周期性计划任务的时候要确保分钟要有数值,如果没有数值表示一个小时的60分钟之内都会执行
    相应的操作!
     
    例子3:星期四的凌晨2点钟重启系统
    0 2 * * 4 /usr/sbin/reboot
     
     
    例子4: 4月2号下午4点钟执行一次系统重启
    0 16 2 4 * /usr/sbin/reboot
     
    注意:在写天和周的时候一定要把握好时间!
    一般写天就不写周了,写周就不写天了!
     
    例子5:星期天晚上11点钟执行一次系统重启
    0 23 * * 0 /usr/sbin/reboot
     
    特殊符号的讲解
    *  表示范围内的任意数值
    -  表示一定的范围。比如分上:45-50  在45分到50分之间执行操作
    /  表示每隔多久执行操作 比如分上:*/10 表示每隔10分钟执行一次操作
    , 表示指定多个时间点 比如分上:4,35,54 表示在4分,35分钟,54分钟执行操作
     
    例子1:在每个月的4-10号之间凌晨三点钟执行一次系统重启操作
    0 3 4-10 * * /usr/sbin/reboot
     
    例子2:每天的凌晨2和3点各执行系统重启操作
    0 2-3 * * * /usr/sbin/reboot
     
    例子3:每天的凌晨2点钟,4点钟,10点钟执行一次系统重启操作
    0 2,4,10 * * * /usr/sbin/reboot
     
    例子4:凌晨2到10点每个小时重启一次系统
    10 2-10 * * * /usr/sbin/reboot
     
     
    在linux系统当中编写计划任务:
     
    选项:
    -e编写计划任务
    -r删除计划任务
    -l查询计划任务
    -u指定给那个用户创建计划任务
     
    例子1: 15点42在/tmp下创建文件testcrond
    [root@ken2 ~]# crontab -e
    42 15 * * * /usr/bin/touch /tmp/testcron
     
    验证:
    [root@ken2 ~]# ls /tmp
    test  testat  testcron
     
    例子2:以时间命名文件
    [root@ken2 ~]# touch `date "+%F_%T"`.txt
    [root@ken2 ~]# ls
    2019-07-15_15:59:37.txt
     
    例子3:在计划任务当中创建以时间命名的文件,每分钟创建一个
    * * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
     
    注意:在计划任务当中%前面都要加一个进行转义
     
    我们在写计划任务的时候其实本质就是创建了一个和用户同名的文件!
    [root@ken2 ~]# cat /var/spool/cron/root 
    42 15 * * * /usr/bin/touch /tmp/testcron
    * * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
     
    例子4:给ken用户创建计划任务
    [root@ken2 ~]# crontab -e -u ken   #在给其他用户创建计划任务的时候需要使用-u选项指定用户名
    [root@ken2 ~]# crontab -l -u ken   #查看的时候也是需要-u选项指定用户名
    * * * * * /usr/bin/touch /tmp/testken
     
     
    在该路径下创建了一个和用户名同名的文件:
    [root@ken2 ~]# cat /var/spool/cron/ken 
    * * * * * /usr/bin/touch /tmp/testken
     
    删除计划任务:
     
    1.删除所有的计划任务
    [root@ken2 ~]# crontab -l
    42 15 * * * /usr/bin/touch /tmp/testcron
    * * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
    [root@ken2 ~]# crontab -r   #使用-r选型会把所有的计划任务都删掉
    [root@ken2 ~]# crontab -l
    no crontab for root
     
    2.删除单条计划任务
    [root@ken2 ~]# crontab -l
    #* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt2
    * * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt1
     
    验证:
    [root@ken2 ~]# ls /tmp
    16:12:01.txt1  
     
    计划任务使用管控
    [root@ken2 ~]# ls /etc/cron.deny 
     
    例子1:不让ken用户使用crond服务
    [root@ken2 ~]# vim /etc/cron.deny 
    [root@ken2 ~]# cat /etc/cron.deny
    ken
     
    切换至ken用户使用crontab创建计划任务被拒绝!
    [ken@ken2 ~]$ crontab -e
    You (ken) are not allowed to use this program (crontab)
    See crontab(1) for more information
     
    定时执行脚本
    [root@ken2 ~]# ls -ld /etc/cron.*
    drwxr-xr-x. 2 root root 21 Apr  4 06:47 /etc/cron.d
    drwxr-xr-x. 2 root root 42 Apr  4 06:47 /etc/cron.daily  #每天执行一次
    drwxr-xr-x. 2 root root 22 Jun 10  2014 /etc/cron.hourly  #每小时执行一次
    drwxr-xr-x. 2 root root  6 Jun 10  2014 /etc/cron.monthly #每月执行一次
    drwxr-xr-x. 2 root root  6 Jun 10  2014 /etc/cron.weekly  #每周执行一次
     
    如何使用?
    把脚本放到相应的目录之下,就会在相应的时间定期执行
    但是需要注意的是脚本必须有执行权限
     
    [root@ken2 ~]# cat test.sh   #编写脚本
    #!/bin/bash
    echo "123" >> /root/test
    [root@ken2 ~]# cp test.sh /etc/cron.hourly/  #脚本在该目录之下会每小时执行一次
    [root@ken2 ~]# chmod +x /etc/cron.hourly/test.sh   #必须加执行权限
     
    定时任务执行的两种方式:
    1. crontab -e
    2. 脚本放在相应的/etc/cron.*
     
    tar压缩归档
     
    c 创建压缩归档包
    z 适应gzip进行压缩
    v 显示压缩归档的过程
    f 指定归档名
    x 解压所归档包
    t 列出包文件
    -C 指定解压包的位置
    --exclude
     
    创建压缩归档包:czvf
    解压缩归档包:xzvf xf
     
    例子1:创建压缩归档tar包
    [root@ken2 ken]# tar czvf text.tar.gz *  #对当前路径下的所有文件进行打包,包文件名为text.tar.gz
     
    例子2:解压压缩归档tar包
    方法一:
    [root@ken2 ken1]# tar xzvf text.tar.gz 
     
    方法二:
    [root@ken2 ken1]# tar xf text.tar.gz 
     
    例子3:查看包文件
    [root@ken2 ken1]# tar tf text.tar.gz 
     
    例子4:打包当前目录下的文件并以时间进行命名
    [root@ken2 ken]# tar czvf `date "+%F"`.tar.gz ./*
     
    例子5:每天凌晨3点钟打包一次/ken下所有的文件
    0 3 * * * /usr/bin/tar czf /tmp/`date "+\%F"`.tar.gz /ken
     
    例子6:解压包到指定的目录
    [root@ken2 tmp]# tar xf 2019-07-15.tar.gz -C /root
     
    例子7:创建tar包排除某些文件
    [root@ken2 ken]# tar czvf test1.tar.gz ./* --exclude=*.tar.gz
    [root@ken2 ken]# tar tf test1.tar.gz 
  • 相关阅读:
    tab切换与表格展示
    ajax
    api
    slice() 方法
    iframe跳转
    快排序
    【问题排查】cpu占用过高排查
    LOJ6013 负载平衡 [最小费用最大流]
    随机序列 [思维题, 组合数]
    P1777 帮助 [状压dp]
  • 原文地址:https://www.cnblogs.com/biht/p/11216848.html
Copyright © 2011-2022 走看看