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 20:52
下一篇 2017-03-19 23:40

相关推荐

  • DHCP服务

    一、DHCP概述     DHCP全称为Dynamic Host Configuration Protocol,即动态主机配置协议,其主要作用是使用网内的主机可以自动获取到网络相关参数信息,以达到高效管理主机的目的。     DHCP采用C/S架构,即Server/Client。…

    Linux干货 2015-05-11
  • find 的使用及练习

    find是个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征【名字类型属主权限等】的文件。find命令的格式: find  [-path ..] -options [-print -exec -ok] path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录 -print :表示将结果输出到标准输出-e…

    Linux干货 2017-06-11
  • 第一周作业:计算机的组成及其功能

    第一周作业 主要是对应了马哥视频前两天共八节课的内容,作业一共有六道题 01.描述计算机的组成及其功能 02.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 03.描述Linux的哲学思想,并按照自己的理解对其进行解释性描述 04.说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pw…

    2017-09-12
  • 学习札记:用户管理,权限管理和ACL欢乐”斗地主”

    补充:touch /etc/nologin 启动系统维护功能,其他用户不能登陆,除了管理员,可以自定义内容,在普通用户登陆的时候可以看到相关维护提示,解除维护模式的话,必须要删除该文件,另外可以创建/run/nologin达到相同的效果(仅限于CentOS 7), 用户属性修改 usermod [OPTION] login -u UID: 新UID -g G…

    Linux干货 2016-08-04
  • Ansible+Corosync+Pacemaker+nfs实现http高可用

    目录: (一)实验环境 (二)准备工作 (三)为node1和node2配置基础配置 (四)使用ansible部署nfs (五)使用ansible部署corosync和pacemaker (六)使用ansible安装crmsh工具 (七)使用crmsh配置http高可用 (八)验证 (九)需要注意的地方 (一)实验环境 1.1、环境拓扑 1.2、所需系统 4台…

    Linux干货 2016-04-29
  • N21天天第十三周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-12-05