分享

Ubuntu下周期执行任务

 XeonGate 2020-06-29

1、cron和crontab命令详解 

crontab 每分钟、每小时、每天、每周、每月、每年定时执行 crontab每5分钟执行一次


cron机制

        cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制

crontab参数
        -u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab
        crontab -u 使用者名称

        -l:可以列出crontab的内容

        -r:可以移除crontab

        -e:可以使用系统预设的编辑器,开启crontab

        -i:可以移除crontab,会跳出系统信息让你再次确定是否移除crontab

crontab时间格式说明
        minute(分)可以设置0-59分

        hour(小时)可以设置0-23小时

        day of month(日期)可以设置1-31号

        month(月份):可以设置1-12月

        day of week(星期):可以设置0-7星期几,其中0和7都代表星期天,或者我们也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一等等

crontab时间格式范例
    1-3表示123
    1-9/2表示13579

crontab范例
    每五分钟执行  */5 * * * *

    每小时执行     0 * * * *

    每天执行        0 0 * * *

    每周执行       0 0 * * 0

    每月执行        0 0 1 * *

    每年执行       0 0 1 1 *

设定cron的权限
        /etc/cron.allow
        /etc/cron.deny

        系统首先判断是否有cron.allow这个文件,如果有这个文件的话,系统会判断这个使用者有没有在cron.allow的名单里面,如果在名单里面的话,就可以使用cron机制。如果这个使用者没有在cron.allow名单里面的话,就不能使用cron机制。

         如果系统里面没有cron.allow这个文件的话,系统会再判断是否有cron.deny这个文件,如果有cron.deny这个文件的话,就会判断这个使用者有没有在cron.deny这个名单里面,如果这个使用者在cron.deny名单里面的话,将不能使用cron机制。如果这个使用者没有在cron.deny这个名单里面的话就可以使用cron机制。

        如果系统里这两个文件都没有的话,就可以使用cron机制

介绍crontab文件
        /etc/crontab
        在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个子目录。
        /etc/cron.hourly
        /etc/cron.daily
        /etc/cron.weekly
        /etc/cron.monthly

        这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本。

2、ubuntu 16.04 计划任务crontab 周期执行任务

crontab主要作用:

    比如我们每天需要清空日志记录文件,我们可以执行一段指令去完成,每天都需要手动输入就比较麻烦,让系统每天去帮我们完成就比较轻松了,根据你自己的定义 可以定位到月 日 时 分 星期 ,以前有个很有名的病毒 '黑色星期五'   每到了周五就发作,计划任务和它一样的道理,只不过没有破坏性,

1、 计划任务,crontab命令选项:

     -u指定一个用户,
     -l列出某个用户的任务计划,
     -r删除某个用户的任务,

     -e编辑某个用户的任务

2 cron文件语法:

    分     小时   日       月       星期     命令

         0-59   0-23   1-31   1-12     0-6     command    

  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件

        "*"代表取值范围内的数字,

        "/"代表"每",

        "-"代表从某个数字到某个数字,

        ","分开几个离散的数字

3、查看计划任务

    查看调度任务
         crontab -l //列出当前的所有调度任务

         crontab -l -u jp   //列出用户jp的所有调度任务

实例1:

    (1)在当前家目录下创建shell脚本123.sh(实现排序)如下

         #!/bin/bash
        arr=(1 5 4 5 6 7 0)
        for (( i=0 ; i<${#arr[@]} ; i++ ))
        do
              for (( j=${#arr[@]} - 1 ; j>i ; j-- ))
              do
            #echo $j
            if  [[ ${arr[j]} -lt ${arr[j-1]} ]]
            then
               t=${arr[j]}
               arr[j]=${arr[j-1]}
               arr[j-1]=$t
            fi
          done
        done
    echo "排序后:"
    echo ${arr[@]}                   

(2)输入crontab -e 添加计划任务(不指定用户就是当前用户)

        第一次会让你选择编译器,如果选错编译器了要更改编译器  输入   select-editor 重新选择 

        ubuntu截图用shift+PrintScreen 选择 ’复制到剪切板‘ 就可以了

        

    我选的是vim ,看个人习惯

    (3)在文本最后输入我们要执行的shell脚本命令

            * * * * * 代表每分钟执行一次 

                

        按esc  输入:wq   保存退出

     (4)   重启cron服务:

    service cron restart

     (5)查看结果

           用户家目录下查看任务有没有执行,如果执行了应该是有pa.txt文件的(任务有重定向到文件)

         

        查看文件内容

            

如果你要周期执行python脚本,你只需要把脚本写好,然后将cron那里的执行命令写成    python3 脚本目录文件名就可以

比如 :

    * * * * *  python3 ~/hello.py >  123.txt

总结:

linux中将一个脚本文件作为一个计划任务小结,以python脚本为例:

  1 创建脚本文件test.py,在文件开头需要加上下面一行

  #!/usr/bin/python

  上面这行的作用是说明使用那个解释器来执行该文件,如果不知道python解释器在哪,可以使用命令which python来查看

  2 给该文件添加可执行的权限

  chmod  +x  test.py

  3 添加计划任务

  crontab -e

  在文件中追加一行,*/2 * * * * /usr/bin/python /home/pc/work/ENV/project/test.py

  保存退出,:wq

  4 重启cron服务

  service cron restart

  结束

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多