Linux的任务计划

Linux的任务计划

        我们在使用系统的过程中,经常需要在以后的某个时间点执行一个任务,而我们又不在机器旁边的时候,比如在半夜时服务器访问的用户很少,宽带资源很充足的时候,要去镜像软件包、重启服务器(虽然Linux很稳定)等,或者需要服务器在每天的特定时间去备份数据库或者做其它周期性的任务。

        这时就需要任务计划去满足我们的需求,在Linux中任务计划分为一次性任务计划和周期性任务计划,只在某个时间点执行一次的任务计划,比如:下载镜像、重启服务器等就用一次性任务计划。而需要周期性、重复执行的任务就用周期性任务计划。

        一次性任务用at命令,而周期性任务计划用crontab命令

        at命令的用法很简单,在命令后跟上一个时间点回车后在at>提示符后输入需要执行的命令,按ctrl+d提交任务即可。

        如:在5分钟后执行一次echo命令

        Linux的任务计划

        创建任务后如何查看?使用如下命令就可以:

        #at -l atq

        Linux的任务计划

        任务创建后想要删除怎么办?更简单,使用-d选项加上要删除的任务编号即可。如删除刚刚创建的任务计划

        #at -d #

        Linux的任务计划

        但这样一次一条或多条命令输入时不觉得麻烦吗?没关系at很贴心的为你设计了批处理模式,让你一次可以创建多项任务,在使用时需要先准备一个文件,在文件中写入要执行的命令。然后通过-f选项去读取这个文件。比如:在家目录下用vim编辑一个文件,在文件中写入要执行的命令,echo “hello”,ls -l /etc/,当然你可以输入更多的命令。然后保存文件名为at.txt的文件。接着再用at -f ~/at.txt 16:00去执行即可。如下图

        Linux的任务计划

        前面提到的时间点有:now、noon(正午)、midnight(午夜)、teatime(pm4:00)、tomorrow,当然你也可以使用精确的时间,如15:00等。

        任务计划执行结果会通过邮件发送给任务提交者,查看邮件时,使用#mail命令,然后输入相应的邮件编号就可以查看邮件内容。如下图:

        Linux的任务计划

        是不是很简单?那么再接着来看看crontab命令。crontab是用来创建周期性任务计划的。也就是说那些需要重复执行的任务就需要用到它,那它是如何实现周期性的呢?在系统中有一个叫crond的守护进程。就是因为它的存在,才得以让我们可以很放心的把这么重要的任务交给它去执行。而cron又分为系统cron和用户cron

        系统cron/etc/crontab文件中有其详细定义,只要我们按照这个格式去创建任务计划。系统就能很愉快的工作。那么它的格式是什么呢?请看下图:

        Linux的任务计划

        有没有觉得晕?没关系,其实它已经很明确的告诉你要怎么去创建一个任务计划了。但这里我们只是去看这里的字段都是一些什么含义,而不建议去直接修改这个文件。具体什么原因你懂的,Linux可不会阻止你自杀的。比如:rm -rf /这个命令你可以很轻松的去执行,但后果可是很严重的。下面说说里面字段的含义:

        SHELL=/bin/bash:用于解释执行任务计划里面的命令的解释器

        PATH=/sbin:/bin:/usr/sbin:/usr/binPATH环境变量,shell执行命令时会以这些路径下去寻找命令的路径。

        MAILTO=root:任务计划的结果发送给谁。

        下面的5*号从左至右分别代表的是分、时、日、月、周。紧接着的是要执行的命令,在写命令时建议使用命令的绝对路径,以免在执行时不能正确解释执行。

        那我们要怎样去定义一项任务呢?在这之前先说说*号的有效取值范围以及如何去表示它们:

            1.每个时间位都应该使用其可用的有效取值范围内的值;

            2.某时间位上的*号表示对应位的所有有效取值;

            3.-:连续的时间点取值,如:30-35 7 * * *

            4.,:离散的时间点取值,如:5,35 * * * *

            5./#:表示在指定范围时间内每隔#一次,如:5-45/3 * * * *

        在此文件中每一行表示一个独立的任务。

        用户cron是普通用户和管理员(强烈建议用此种方式创建任务计划)以安全的方式创建任务计划的,因为在保存退出后,crontab命令会检查命令是否有语法错误。创建成功后会在/var/spool/cron/目录下创建一个同用户名的文件。而crontab的用法也很简单,在命令后跟上-e 选项就可以创建任务计划。

        例:每周246的凌晨302分把/etc目录下的文件备份至/backup目录下并以etc_开头后面跟上当天的日期。而后保存即可(友情提示:在命令中使用%时,要记得转义,或者用引号。)。如下图:

        Linux的任务计划

        查看自己的cron任务列表,使用-l选项。如下图就是刚刚创建的任务计划。

        Linux的任务计划

        那么要删除任务计划怎么办?对此我们直接用crontab -e去编辑/var/spool/cron/目录下的文件。如果连这个文件都不想要了?那好办,执行crontab -e后这个文件就被删除,从此一切烦恼就随往事烟消云散了。

        当然身为管理员无时无刻不体现着特权,使用-u选项还可以别的用户创建任务计划。请看下图

        Linux的任务计划

        上图创建了一个每天6、9、12、15、18点查看当前系统挂载的所有文件系统,并将结果追加至/tmp/mounts.txt文件中的任务。

        -u选项还可以配合-l-r选项实现查看和移除任务计划。

        如果我们创建的任务计划在某天不能正常的执行,比如系统宕机、重启等,别担心还有一个小工具:anacron

        anacroncron的补充,它的主要功能就是去检查crontab中的任务在过去的一个周期内是否有成功执行。如果没有执行,则在开机以后在系统的某个时间点内让其执行一次,无论周期是否到达。

        anacron很完美的解决了我们的忧虑。

原创文章,作者:人字拖,如若转载,请注明出处:http://www.178linux.com/71377

(0)
人字拖人字拖
上一篇 2017-03-19
下一篇 2017-03-19

相关推荐

  • Haproxy+keepalivd+LAMP

    目录 一、试验部署 1、实验要求 2、实验准备 3、拓扑结构 4、网络规划 二、基础设置 1、LAMP配置 2、HAProxy配置 3、Keepalived配置 三、测试 四、总结 一、试验部署 1、实验要求 (1) 动静分离部署wordpress,动静都要能实现负载均衡,要注意会话的问题; (2) 给出设计拓扑,写成博客; (3)haproxy的设定要求:…

    2017-05-18
  • 推荐-常用RAID级别详解

    一、RAID是什么       RAID(Redundant Arrays of Indent Disks)的名称是独立磁盘冗余阵列,是一种通过将多块硬盘按照某种特定的结构组织起来当做一块硬盘来使用的技术,多块硬盘不同的组织结构我们称之为RAID的级别。而RAID技术的特性主要表现在两个方面: (1)提高硬盘…

    Linux干货 2016-03-27
  • Python第一周小结

    经历了两个星期Linux运维基础的铺垫,这周我们正式开始了python的学习。经过第一周的各种挣扎以及反复训练,终于有所收获了一点东西。现在将第一周中学到的一个非常重要的算法技巧总结如下: 即:折半思想 例:给定一个不超过五位数的正整数,判断该数有几位数 Code1:                                              …

    Linux干货 2018-03-26
  • Varnish的配置与部署

          Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。 va…

    2017-07-27
  • 马哥教育网络班22期第5周课程作业

    1、显示当前系统上root、fedora或user1用户的默认shell; cat /etc/passwd | grep ^root | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); …

    Linux干货 2016-12-05
  • awk的进阶

    前言 awk的中有很多的控制语句,awk也支持if语句,while语句,for语句等等编程逻辑充的控制语句及数组、函数。 awk的进阶无非就是多练。 1.控制语句 (1)if-else语句 语句格式: if(condition) {statments}    if  (条件) 条件为真 执行{statments} 只有一个语句可…

    Linux干货 2016-06-26