Linux之任务计划

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

  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;也可以指定today或tomorrow来表示今天或明天。当指定了时间并按下enter之后,at会进入交互模式并要求输入指令或程序,当输入完成后按ctrl+D即可完成。执行结果会通过邮件发送给执行程序的账户。
  2. 参数说明 -V :出版编号 -q:使用指定queue来存储,at的资料存放在所谓的queue中,使用者可以同时使用多个queue,而queue的编号为a,b,c…..z以及A,B,C……Z共52个; -m:不管程序指令执行完后有没有输出结果,都发邮件给使用者 -f file:读入预先写好的命令文档。可以将所有的命令先写入文档在一次读入; -l:列出所有at任务;或者atq; -d:删除at任务,或者使用atrm; -v:列出所有已经完成但尚未删除的指定;

3、实例:指定今天下午5:30执行某个命令,今天是2015年5月17日中午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 实例2:at指定一个任务,在当前时间一分钟后执行,显示/etc/issue中的内容;

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

  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-6)0和7都表示星期天 除了数字还有几个特殊的符号就是“*”“/”“–”“,”,*代表所有的取值范围内的数字,/代表每的意思,*/5代表每5个单位,–代表从某个数字到某个数字,“,”分开几个离散的数字。 例子1: 0 8 5 6 * command 表示每6月5日的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号和每个礼拜的1到3的早上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.hourly,cron.daily,cron.weekly,cron.weekly,这4个目录下脚本的执行周期 分别是每小时,每天,每周,每月。根据自己的需要,将要运行的脚本直接放置到对应 的目录下即可,系统会自动为你完成任务。 3.5.使用注意事项:每月几号和周几一般不同时使用,如 1 9 * * 3 :表示每周三执行一次; Crontab –e 打开编辑界面定义任务时先启用临时文件,如果刚到此时间点执行而没有编辑会怎么样? 4、anacron: crontab的补充机制,检查有没有过去的一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次;这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改。配置文件是/etc/anaconrtab。 以上是自己总结的一些心得体会,任务计划是实现自动化运维的重要命令,希望大家重视,如有问题请多指点。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

浅谈TimesTen内存数据库的结构

作者介绍 ? 朱亮 云和恩墨技术专家,6年专职oracle dba生涯先后服务于保险、金融、电信、百货等客户 Oracle TimesTen In-Memor...

42580
来自专栏Laoqi's Linux运维专列

git 分支+标签+别名配置管理

23160
来自专栏梦里茶室

【Chromium中文文档】OS X 沙箱设计

背景 沙箱将进程视为一种恶劣的环境,因为进程任何时候都可能被一个恶意攻击者借由缓冲区溢出或者其他这样的攻击方式所影响。一旦进程被影响,我们的目标就变成了,让这个...

24000
来自专栏云计算教程系列

如何在Ubuntu 14.04上备份,还原和迁移MongoDB数据库

MongoDB是最受欢迎的NoSQL数据库引擎之一。它以可扩展,强大,可靠和易于使用而闻名。在本文中,我们将向您展示如何备份,还原和迁移MongoDB数据库。

16840
来自专栏杨建荣的学习笔记

Linux命令ping,nc的学习(r10笔记第20天)

今天看了下《Linux大棚命令百篇》网络和系统篇,发现了几个很不错的命令,我是看着目录然后根据自己的需要选了3个命令,没想到3个命令都让人眼前一亮,刷新了我原本...

47160
来自专栏信安之路

Oauth协议介绍与安全隐患

OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。目前,...

23900
来自专栏幸山的专栏

精通yum配置以及问题解决

yum基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁...

1.1K00
来自专栏java思维导图

架构师详解:Nginx 架构

原文链接:https://my.oschina.net/u/3770281/blog/1802493

16420
来自专栏mini188

MongoDB安装与使用体验

1、获取并安装 具体的安装包可以到官方网站下载:http://www.mongodb.org/downloads 我看着教程就下载了linux版本吧,也不是很...

25660
来自专栏区块链

六个常见的 PHP 安全性攻击

了解常见的PHP应用程序安全威胁,可以确保你的PHP应用程序不受攻击。因此,本文将列出 6个常见的 PHP 安全性攻击,欢迎大家来阅读和学习。 1、SQL注入 ...

24660

扫码关注云+社区

领取腾讯云代金券