zoukankan      html  css  js  c++  java
  • crond定时任务

    程序概念:
       我们使用的命令,就是程序,二进制程序。
       基本特征:一堆代码,一个文件,一个命令。
       程序是静态的,放在电脑里没有被运行。
       程序存在于磁盘中
    进程概念:
       简单的说把系统中的程序运行起来就是进程。
       进程会存放在内存中
       每个进程在启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程ID或者PID进程号
       每个进程可能有两种方式存在:一个是前台,一个是后台
       一般的系统网络服务都是以后台方式存在的,且都会常驻在系统中,直到关机或者主动杀死时才能停止(比如ssh远程连接服务,常称之为守护进程
    ==============================================
    第一个带有进程或者守护进程的服务。crond定时任务服务。(守护进程)
    Linux的定时任务服务crond
    1.crond是什么
       crond是Linux系统中用来定期执行命令或者指定程序任务的一种服务或者软件
       一般我们安装完C5/C6系统的时候,crond就会默认存在了
       优化开机自启动服务的时候,第一个就是crond
       crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务
    秒级任务:
        1.crond无能为力
        2.自己写守护进程shell循环。
        3.Quartz也可以实现秒级任务
    2.为什么需要定时任务?
         服务器:7*24小时开机提供服务是网站的基本特征
         有重要数据:1天备份一次,5份以上
                              服务器上的数据一般最低1天备份一次,每分钟(实时备份)再增量备份
                              半夜一点备份
    定时任务产生了。定时任务可以实现帮助我们自动备份数据

    Linux定时任务分类:
        1.系统自身的定期执行的任务
           ll /etc/|grep cron
        2.用户执行的定时任务
          crontab -l
    接下来我们看一下重点就是用户执行的定时任务!
           linux的定时任务分类:
              1.at适合执行一次就结束的调度任务。突发性的任务,每天晚上。(了解)
                    依赖服务atd
              2.atacron   适合于非7*24小时开机的服务器准备的。开机执行的,
                    检测停机期间没有执行的任务,在开机后一次性执行一遍
     重点  3.crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务
                     crond依赖的服务就是crond
         提示:我们说的crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令
    ====使用者权限及定时任务文件
               /etc/cron.deny    该文件中所列用户不允许使用crontab命令
              /etc/cron.allow    该文件中所列用户允许使用crontab命令,优先于  /etc/cron.deny
              /var/spool/cron   所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名    
    定时任务指定格式
                介绍:用户的定时任务分为6段,每段用空格分隔             系统定时任务为/etc/crontab,分为8段
                         一般前五段为时间的设定段,第六段为所要执行的命令或脚本任务
    系统定时任务:
    # 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
    用户定时任务:
                         时段记忆口诀:分时日月周
                         01  *   *   *   *   cmd
                         02  *   *   *   *   cmd
                         22  4   *   *   0  cmd
          特殊符号:*   表示每       经验技巧:定时任务规则如果到小时,就最多提每天
                           -    表示区间    19-21表示在19点到21点
                           ,  表示分割时段   17,18,19       表示17、18、19点执行
                            /n   n代表数字每隔
           提示:
                    1.cmd为要执行的命令或脚本,例如/bin/sh   /server/scripts/oldboy.sh
                    2.每一列之间必须要有一个空格。
    注意:当定时任务没有执行时,要首先看一下crond服务有没有开启
    ******************************************************************
    crontab -e     /var/spool/cron/root       crontab -e  编辑会检查语法,而直接echo,vi编辑配置不会
    visudo           /etc/sudoers                     visudo编辑会检查语法,而直接echo,vi编辑配置不会
    *******************************************************************
    书写crontab定时任务的多个基本要领:注意要写注释
    例子1:每分钟打印一次自己的名字拼音全拼到“/server/log自己的名字命名的文件”中
           [root@localhost /]# crontab -e
           * * * * * echo zhangran>>/server/log/zhangran.txt    一定要用追加要不就覆盖了
    例子2:每周六日上午九点和下午2点来老男孩linux学习(执行/server/scripts/oldboy.sh)
           要求:/server/scripts/oldboy.sh脚本的功能是打印当天的日期格式为2014-03-23,随意追加到文件
                      或直接屏幕打印
           注意:执行脚本要加sh    相当于命令  例子[root@localhost /]# sh /abc/dcf.sh
           步骤1.创建目录并创建脚本
                 mkdir   -p  /server/scripts/
                 echo    ‘date  +%F’>/server/scripts/oldboy.sh
                 sh     /server/scripts/oldboy.sh
           步骤2.将脚本写成定时任务   
          注意:脚本必须能执行最好复制或者补全,不能手敲
                  echo   “00 09,14 * *6,7     sh     /server/scripts/oldboy.sh   >/dev/null  2>&1”>>/var/spool/cron/root
          注意:定时任务命令结尾 加/dev/null  2>&1     1是正确输出2是错误输出
                    这里2>&1表示让标准错误和标准输出一样,本命令北荣为即把脚本的正常和错误输出都重定向到/dev/null,即不记录任何输出
          注意:超过两行的命令执行,最好用脚本文件
    当定时任务没有完成或者出错去看日志:cat /var/log/cron    给定时任务看病的日志
    -----------------------------------------------------------------------------------        
    小习题
    1.每格一分钟,打印一个加号到oldboy.log,给出crondtab完整命令
    [root@localhost ~]# crontab -e
    * * * * * echo +>>/root/oldboy.log
    2.每个两个小时将/etc/servic文件打包备份到/tmp下(最好每次备份成不同的被分包)
    00 */2 * * * tar zcf /tmp/servic`date +%F`.tar.gz  /etc/servic
    3.每天晚上12点。打包站点目录/var/www/html备份到/data目录下(最好每次备份按时间生成不同的备份包)
    00 24  * * * tar /data/www_`date +%F-%H`.tar.gz  /var/www/html
    4.每周六、日上午9点和下午14点来老男孩学习(执行程序/server/scripts/oldboy.sh)
    echo   “00 09,14 * *6,7     sh     /server/scripts/oldboy.sh   >/dev/null  2>&1”>>/var/spool/cron/root
    ============================================================
    散乱知识点:
    显示行号:set nu
    vi命令的考察:
    退出保存:wq
    退出并强制保存,!为强制的意思:wq!
    强制退出,不保存:q!
    光标移动到文件的第一行:gg
    光标移动到文件的最后一行:G
    从光标所在位置将光标移动到当前行的开头:^
    从光标所在位置将光标移动到当前行的结尾:$
    取消上一次的动作:u
    删除一行:dd   100dd是删除100行
    向下搜索:/字符
    向上搜索:?字符
    --------------------------------------------------------------------------------------------
    >dev/null 2>&1:让标准错误和标准输出都定向到空里
    2>&1:就是把标准错误重定向到标准输出
    如果定时任务的结尾不加>dev/null 2>&1等命令配置,有可能有大量输出信息
    ,时间长了,可能由于系统未开启邮件服务而导致邮件
    临时目录/var/spool/clientmqueue文件数猛增的隐患发生,
    大量文件会占用大量的磁盘inode节点使磁盘inode满而无法写入正常数据
    ------------------------------------------------------------------------------
    书写Linux定时任务的8个要领
           要领1:为定时任务规则加必要的注释
           要领2:执行shell脚本任务前加/bin/sh
           要领3:定时任务命令或脚本的文件结尾加>dev/null 2>&1
           要领4:定时任务命令的执行,最好用脚本文件
           要领5:在指定用户下执行相关定时任务
                    查看普通用户的定时任务:crontab -u zr  -l
                    编辑普通用户的定时任务:crontab -u zr  -e
           要领6:生产任务程序不要随意打印输出信息    比如tar   zcf    不加v
           要领7:定时任务的脚本要规范路径,有指定的脚本存放目录
           要领8:配置定时任务规范操作过程,防止出错
                       -首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环节减少出错机会
                       -然后测试脚本,测试成功后,辅助脚本的规范路径到定时任务的配置里,不要手敲
                       -先在测试环境下测试,然后正式环境规范部署
    =========================================================
    企业生产场景如何提哦是crontab定时任务
          1.增加执行任务频率调试任务(某些任务不能用于生产环境)
                    -在调试时,把任务执行频率调快点。但是有些任务是不允许频繁执行的,比如往数据库里插入数据
                     这样的任务就要在测试机上测试好,然后部署到正式线上
                    -规范公司开发和运维人员操作流程:个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境
                    -使用log文件调试任务。
                    * * * * * sh  -------  >/tmp/file.log   2>&1
          2.调整系统时间调试任务(不能用于生产环境)
          3.通过脚本日志输出调试定时任务
          4.注意一些任务命令带来的问题
                     前面如果有重定向,后面要去掉 >dev/null  2>&1
          5.注意环境变量导致的定时任务故障:把环境变量的定义加到脚本里
          6.通过crond定时任务服务日志调试定时任务
                   查看定时任务服务日志:/var/log/cron
    ================================================
    定时任务8句真言:
      -系统环境变量问题
      -定时任务要绝对路径
      -脚本权限问题加/bin/sh
      -时间变量问题要用    用脚本无所谓
      -脚本结尾要加>/dev/null 2>&1
      -定时任务前加注释
      -使用脚本程序替代命令行定时任务
      -避免不必要的程序及命令输出
      -切到目标的上一级目录打包
    ls |xargs   rm -f

                   

     

  • 相关阅读:
    Java基础教程——模拟B/S结构的服务器
    Java基础教程——Socket编程
    Java基础教程——模拟浏览器发送请求
    Java基础教程——网络基础知识
    Java基础教程——线程通信
    Java基础教程——线程局部变量
    Java基础教程——线程同步
    Java基础教程——线程池
    Java基础教程——线程状态
    Java基础教程——多线程:创建线程
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/10900774.html
Copyright © 2011-2022 走看看