Linux之任务计划 crontab

Linux之任务计划 

 

用过windows的同学应该都知道在控制面板中有一个“任务计划”选项,我们可以通过向导设置让计算机在某个时间点或者开机时运行某个脚本或者批处理等等,方便我们的日常管理监视工作;同样在Linux系统中,如果我们想在开机时就运行某个操作,可以直接将命令写入/etc/rc.local中,该操作就会在机器开机时运行;如果把自己写的Bash Shell脚本的名称写在/etc/rc.local中,开机后也会执行其操作;也就是说,在Linux启动的最后阶段,系统会执行存于rc.local中的命令;类似于windows里面的“启动”菜单。如果想在Linux中定时去执行某些操作呢?我们可以使用at ,batch ,crontab , anacron等命令;

一、一次性执行任务命令atbatch

说白了就是任务只执行一次,就结束操作,不会循环执行其操作。

  1. 使用方式:at [-v][-q queue][-f file][-mldbv] TIME

    说明:at可以让使用者指定在TIME这个特定时刻执行某个程序或指令,TIME的格式是HH:MM其中HH为小时,MM为分钟。如果想要指定超过一年内的时间,则可以使用MMDDYY或者MM/DD/YY的格式,其中MM是分钟,DD是第几天,YY是指年份。另外,也可以使用想now+时间间隔来指定时间,其中的时间间隔可以为minutes ,hours ,days ,weeks.例如now+3days;也可以指定todaytomorrow来表示今天或明天。当指定了时间并按下enter之后,at会进入交互模式并要求输入指令或程序,当输入完成后按ctrl+D即可完成。执行结果会通过邮件发送给执行程序的账户。

  2. 参数说明

    -V :出版编号

    -q:使用指定queue来存储,at的资料存放在所谓的queue中,使用者可以同时使用多个queue,queue的编号为a,b,c…..z以及A,B,C……Z52个;

    -m:不管程序指令执行完后有没有输出结果,都发邮件给使用者

    -f file:读入预先写好的命令文档。可以将所有的命令先写入文档在一次读入;

    -l:列出所有at任务;或者atq;

    -d:删除at任务,或者使用atrm;  

    -v:列出所有已经完成但尚未删除的指定;

3、实例:指定今天下午5:30执行某个命令,今天是2015517日中午12点其格式如下:

       at 5:30pm

       at 17:30

       at  17:30 today

       at now + 5 hours

       at now + 300 minutes

       at 17:30 17.5.15

       at 17:30 5/17/2015

       at 17:30 May 17

      实例2at指定一个任务,在当前时间一分钟后执行,显示/etc/issue中的内容;1.png

实例3:先创建一个文档work,放入预先执行的命令,然后用at –f work TIME去执行;2.png

  1. at的执行权限:

    在任何情况下,root用户都有执行权限;

    对其他用户来说,是否能够使用取决于两个文档/etc/at.allow/etc/at.deny

    如果/etc/at.allow文档存在的话,那么只有在其中列出的用户在能够使用at

    如果该文档不存在,那么将检查/etc/at.deny文档是否存在,在这个文档中列出的用户均不能使用该命令;

    假如两个文档都不存在,那么只有中级用户能够使用该命令;

    空的/etc/at.deny文档意味着所有的用户都能够使用该命令,这是系统默认状态.

  2. batch命令同at命令,但无须为其指定时间,其会选择系统资源空闲时执行指定的作业。

  3. mail命令(linux收发邮件使用方法)

    在终端中输入命令mail,回车,如果有邮件会显示出来有几封,如果没有会提示no mail for user;输入mail后进入&模式,此时可以输入想要查看的邮件编号数字来查看内容,如果想要删除某个邮件可以使用d #命令,按q保存退出,按x不保存退出;

    两种发邮件的方法:

           mail –s “subject” username </etc/fstab

           echo “subject”  | mail –s “content”  username

    默认系统会安装并启动邮件服务;25号端口,可以使用netstat –tnl /tan   查看25号端口smtp协议是否运行 ;有的系统可能默认没有安装邮件系统,此时需要安装sendmial包即可;

二、周期性执行任务命令crontab(重点)

相比用于安排一次性任务的at命令,crontab命令主要是用于安排一些周期性的任务,比如 定期备份数据、定时杀毒、定期清理垃圾文件等。 Linux中的cron进程是一个主要的系统调度进程,可以在后台自动完成用户指定的任务 计划。它每分钟检查一遍各个用户的“”任务计划书“”--也就是crontab文件,如果计划书中所指定的运行条件满足,就立即为用户执行计划书中的任务。centos5以前的版本叫做vixie-cron,centos6以后的版本叫作cronie,在运行前使用rpm –qa | grep “cron” 来查看系统是否已经安装;可以通过service crond status查看状态,service crond start ,chkconfig crond on 启动服务,设置开机自动启动;

Cron任务分两类:一类是系统cron:定义在/etc/crontab中,一类是用户cron:定义在/var/spool/cron中,目录中每个用户都有一个与用户名相同的文件,其功能类似于/etc/crontab;每行定义一个独立的任务;

  1. crontab命令使用方法

    crontab [-e [username] | -l [username] | -r [username] | -v [username] | File ]

    说明:crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说就是类似使用者的时程表。

    -u username 是指定username的时程表,这个前提是你必须要有其权限,比如root才能够指定他人的时程表,如果不使用-u user的话,就是表示设定自己的时程表。

    Crontab –l:列出某个用户cron服务的详细内容

    Crontab –e:编辑某个用户的cron服务;

  2. crontab的格式

    # For details see man 4 crontabs

    # 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

    # |  |  |  |  |

    # *  *  *  *  *  command to be executed

    说明:当使用crontab -e编辑当前用户的cron表后,会出现一个vi文件,cron的格式是这样的。分成两列,左边是时间,右边是运行的命令。时间是由5个部分组成。如果执行的命令太多,可以把这些命令写到一个脚本里面,然后再直接调用这个脚本,调用的时候写出命令的完整路径。

    时间的设定有一定的要求,前面5*代表5个数字,数字的取值范围和含义如下:

    分钟(0-59)小时(0-23)日期(1-31)月份(1-12)星期(0-607都表示星期天

    除了数字还有几个特殊的符号就是“*”“/”“”“,,*代表所有的取值范围内的数字,/代表每的意思,*/5代表每5个单位,代表从某个数字到某个数字,“,”分开几个离散的数字。

    例子1:   0 8 5 6 *  command  表示每65日的8点整执行命令;

    例子2: 10,30,50 * * * * date  表示每小时的10分,30分,50分显示时间

    例子3: 0 6 * * * * echo “good morning” >>/tmp/test.xt 每天早上6点执行,注意单纯的echo从屏幕上看不到任何输出,因为cron把任何输出都会通过mail发送给用户;

    例子4: 0 */2 * * * echo “hi” 每两个小时执行一次;

    例子5: 0 11 4 * 1-3 command 表示每个月的4号和每个礼拜的13的早上11点执行

3通常,系统并不允许用户直接编辑计划书,/var/spool/cron/crontabs目录也只有root用户才可读写。为了方便计划书的管理,系统提供了crontab命令:crontab -u username –e

补充说明:

3.1. 环境变量,cron进程执行任务时,并不加载计划书所属用户的环境变量,只加载几个最基本的环境变量,比如执行任务的sh,$HOME,$MAILTO等。这几个环境变量的定义是在 /etc/crontab文件中。其中$MAILTO是指定计划执行过程中发生错误或者有数据输出时发 送邮件到哪个用户。通常会在脚本中加入. /etc/profile 或者. ~/.bash_profile即可。

3.2. 不能运行crontab命令或者计划没有被执行,crontab的权限设置是由两个文件来决定的 /etc/cron.allow, /etc/cron.deny。如果存在/etc/cron.allow,则把要执行计划的 用户名称添加到其中;若/etc/cron.deny存在,则确保要执行计划的用户名称不在 /etc/cron.deny中;如果两个文件都存在,/etc/cron.allow优先。

3.3. 计划书的输出和日志,如果用户的计划书在运行时有输出,用户是无法直接从终端上看 到的。cron进程会将执行计划时产生的所有输出数据和错误信息发送到指定用户的邮箱 ,用户可到邮箱中去查看,所以建议在计划中把有用的输出数据重定向到文件中。要想 查看各个计划的执行情况,可以查看cron进程的日志文件:/var/log/cron

3.4. 更简单的任务计划, 如果觉得这样麻烦,还有一种简单的方法。/etc下面有4个目录: cron.hourlycron.dailycron.weeklycron.weekly,这4个目录下脚本的执行周期 分别是每小时,每天,每周,每月。根据自己的需要,将要运行的脚本直接放置到对应 的目录下即可,系统会自动为你完成任务。

3.5.使用注意事项:每月几号和周几一般不同时使用,如 1 9 * * 3 :表示每周三执行一次;

Crontab –e 打开编辑界面定义任务时先启用临时文件,如果刚到此时间点执行而没有编辑会怎么样?

4anacron: crontab的补充机制,检查有没有过去的一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次;这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改。配置文件是/etc/anaconrtab。

以上是自己总结的一些心得体会,任务计划是实现自动化运维的重要命令,希望大家重视,如有问题请多指点。

原创文章,作者:wxdz_2004(古雨秋),如若转载,请注明出处:http://www.178linux.com/4539

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-05-18
下一篇 2015-05-18

相关推荐

  • 1、安装配置介绍

    http://note.youdao.com/yws/public/redirect/share?id=b90faa657ee452edb27ab1a13fc7b0bc&type=false

    Linux干货 2016-08-08
  • 元数据、修改时间戳、文件名通配、定义命令的别名、I/O重定向及管道

      文件的元数据 文件的数据分为两类:一类为元数据,既属性数据;一种就是数据本身:  数据是指普通文件中的实际数据  元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等 那么如何查看文件的详细信息? stat命令: 功能说明:    显示inode内容命令用法:    stat…

    Linux干货 2016-11-06
  • 马哥教育网络班22期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移…

    Linux干货 2016-09-26
  • Linux下如何使用sendEmail来发送邮件

    1)什么是sendEmail sendEmail是一个轻量级,命令行的SMTP邮件客户端(注意,不要跟sendmail混淆了)。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大,从此以后你就爱上了它。 2)安装sendEmail [root@zabbix ~]# wget http://…

    系统运维 2016-07-29
  • 第六周小练习

    详细总结vim编辑器的使用并完成一下练习 vim编辑器的基本使用 vim模式: 1、编辑模式(命令模式) 2、输入模式 3、末行模式  一、打开文件 vim /path/to/somefile 打开单个文件 如果文件存在为打开,否则保存退出时为新建 vim /path/to/somefile vim +# : 打开文件…

    Linux干货 2016-12-19
  • Linux系统程序包管理—rpm

     概述:      本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装 一、软件运行环境     1.□API:Application Programming Interface (应用程序开发接口)         &n…

    Linux干货 2016-09-01