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

相关推荐

  • 马哥面授班20期-第一周(计算机基础,linux入门)

    一.计算机发展历史及硬件组成部分     计算机发展历史:第一代:(1946-1957)电子管时代,第二代:(1958-1964)晶体管时代,              第三代:(1965-1970)集成电路时…

    Linux干货 2016-07-26
  • DNS实验

    本实验需的注意问题:      1、运营商的服务器需要更改根指向服务器地址      2、根服务器上的配置文件/etc/named.conf需要将"."根区域禁用;      3、更改区域数据库文件的属组为named;c…

    Linux干货 2016-12-12
  • Mysql之运用MHA的功能实现服务高可用

    MHA介绍 (Master High Availability) MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供 了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的 master 节点,在此期间,…

    2017-09-14
  • 计算机相关简介和linux相关简介

    一、计算机相关简介与linux的一些概念 计算机系统 由硬件(Hardware)系统和软件(Software)系统两大部分构成: 硬件系统 :CPU(控制器、运算器),内存储器(RAM、ROM),外存储器(硬盘等),输入设备(键盘、鼠标等),输出设备(显示器等),其他设备相关设备。  软件系统 :系统软件(操作系统,数…

    Linux干货 2017-02-18
  • iptables

    1.开启防火墙systemctl start firewalld2.清空所有的默认规则,定义自己的规则iptables -F 查看此时的iptablesiptables -nL Chain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy ACCEPT)…

    Linux干货 2017-07-26
  • shell脚本编程之数组

       数组就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的元素。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。 一、数组的表示方式   1、下标数组 &…

    Linux干货 2016-01-05