Linux成长之路(五)——Linux任务计划crontab和命令执行顺序控制与管道

Linux任务计划crontab

  • crontab的使用
    我们时常会有一些定期定时的任务,如周期性的清理一下/tmp,周期性的去备份一次数据库,周期性的分析日志等等。而且有时候因为某些因素的限制,执行该任务的时间会很尴尬。本文将带你很好的利用 Linux 系统的计划工具。

    • crontab简介
      crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

      通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

    • crontab准备
      crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了。虚拟机中的系统默认已经启动了rsyslog。
      这里写图片描述
      同样crontab也已经自动启动。

    • crontab使用
      【crontab -e】用来添加一个计划任务,第一次运行这个命令时会让用户选择一个喜欢的编辑器(这里选择Vim):
      这里写图片描述

      然后就会进入到编辑Vim页面:
      这里写图片描述

      下面介绍crontab的添加的命令的格式:
      这里写图片描述

      下面我们举一个栗子:
      在文档的最后一排加上这样一排命令,该任务是每分钟我们会在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件:
      这里写图片描述
      注意:“ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用,前面加 ” \ ” 符号转意,否则,“ % ” 符号将执行其结束命令行或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令。

      添加成功后保存文件,会有提示:installing new crontab
      这里写图片描述
      也可以用【crontab -l】来查看:
      这里写图片描述

      虽然我们添加了任务,但是如果 cron 的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会帮我们执行,我们可以通过以下2种方式来确定我们的 cron 是否成功的在后台启动,默默的帮我们做事,若是没有就得执行上文准备中的第二步了。
      这里写图片描述

      这里写图片描述
      可以看到确实每隔一分钟都有一个文件产生。
      我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈:
      这里写图片描述

      删除crontab计划任务:
      这里写图片描述

  • crontab的深入
    这个 crontab -e 是针对使用者的 cron 来设计的,也就是每个用户在添加任务,就会在/var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样可以做到隔离,独立,不会混乱。
    这里写图片描述

    如果是系统的例行性任务 时,该怎么办呢?是否还是需要以 crontab -e 来管理你的例行性工作排程呢?当然不需要,你只要编辑 /etc/crontab 这个档案就可以啦!有一点需要特别注意!那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个执行的,只是你可以 root 的身份编辑一下这个文档!

    基本上, cron 这个服务的最低侦测限制是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的资料内容 ,因此,只要你编辑完 /etc/crontab 这个文档,并且将他存储之后,那么 cron 的设定就自动的执行了!

    在/etc目录下,我们可以观察到关于 cron 的文件有一下几个,他们的作用又是什么:
    这里写图片描述

    /etc/cron.daily,目录下的脚本会每天让执行一次,在每天的6点25分时运行;
    /etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的17分钟时运行;
    /etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月1号的6点52分时运行;
    /etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的6点47分时运行;
    当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改。

命令执行顺序控制与管道

  • 命令执行顺序的控制

    • 顺序执行多条命令
      假设我们有一堆命令要运行,又不想一个一个运行-等待-运行-等待…这时就可以使用“;”来进行批量顺序运行命令。
      这里写图片描述

    • 有选择的执行命令
      我们有时候需要像代码那样让有些命令根据前面命令的执行情况来判断该条命令是否应该执行,比如如果我们要在ls命令安装了的情况下看看用户目录下的文件:
      这里写图片描述
      说明:因为ls存在,所以【which ls】返回值为0,&&表示的是如果返回值为0则运行下一句,否则就不运行。
      再看一个栗子:
      这里写图片描述

      竟然有&&就一定有||,所以||是当上一条命令返回值为1时运行下一句:
      这里写图片描述

      这里写图片描述

  • 管道
    管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

    • 试用
      我们用ls -a -l命令查看 /etc文件,因为内容过多,所以我们可以用管道来将它的内容作为less命令的输入:
      这里写图片描述
    • 打印每一行的某一字段【cut】
      打印/etc/passwd文件中以:为分隔符的第1、3、4个字段:
      这里写图片描述

      这里写图片描述

      这里写图片描述

    • 在文本中或stdin中查找匹配字符串【grep】
      grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找,不过在学习正则表达式之前,这里介绍它简单的使用,而关于正则表达式后面将会有单独一小节介绍到时会再继续学习grep命令和其他一些命令。

      先体验一下,我们搜索/home/gcg目录下所有包含”gcg”的所有文本文件,并显示出现在文本中的行号:
      这里写图片描述
      说明:-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。这个操作实际没有多大意义,但可以感受到grep命令的强大与实用。

      也可以在结果中用grep匹配含*cg的环境变量:
      这里写图片描述

    • 简单小巧的技术工具【wc】
      wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息:
      这里写图片描述

      这里写图片描述

      再来结合管道来操作一下,下面统计 /etc 下面所有目录数:
      这里写图片描述

    • 排序命令【sort】
      功能很简单就是将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。

      默认是字典排序:
      这里写图片描述

      反转排序:
      这里写图片描述

      安特定字段排序:
      这里写图片描述
      说明:上面的-t参数用于指定字段的分隔符,这里是以”:”作为分隔符;-k 字段号用于指定对哪一个字段进行排序。

      上面那个是按字典排序,这个是按数字大小排序:
      这里写图片描述

    • 去重命令 【uniq】
      uniq命令可以用于过滤或者输出重复行。

      • 过滤重复行
        实验:
        1、先用【history】命令查看历史使用过的命令:
        这里写图片描述
        2、去掉命令参数,只留下命令本身:
        这里写图片描述
        3、过滤连续重复命令:
        这里写图片描述
        说明:这里只会过滤掉连续重复行,而不是全文重复的命令,这里可以先排序,再来过滤(也可先过滤再排序):
        这里写图片描述

        这里写图片描述

      • 输出重复行
        输出重复过的行(只输出1个)和它的重复次数:
        这里写图片描述

        输出所有重复的行:
        这里写图片描述


参考文献:https://www.shiyanlou.com/courses/1
注:转载请注明原文出处:
作者:CUG_UESTC
出处:http://blog.csdn.net/qq_31192383/article/details/53234512

发布了30 篇原创文章 · 获赞 252 · 访问量 26万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章