Linux 任务计划

一.配置cron实现自动化

使用cron实现任务自动化可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的。

1./etc/crontab文件实现自动化

cron守护进程可以在无需人工干预的情况下根据时间、日期、月份和星期的组合来调度执行重复任务的守护进程。

要使用cron服务,必须安装了vixie-cron-4.2-4.fc8软件包,而且必须运行crond服务,可以使用如下命令查询软件包安装和服务运行的情况。

[[email protected] ~]# rpm -qa |grep vixie-cron

//查看是否安装vixie-cron软件包。

[[email protected] ~]# service crond status

crond (pid  2179) is running...

[[email protected] ~]#

//查看crond服务运行状态。

cron的主配置文件是/etc/crontab,该文件内容如下。

[[email protected] ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# 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

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

前4行是用来配置cron任务运行环境的变量。shell变量的值告诉系统要使用哪个shell环境(在这个例子里是bash)。PATH变量定义用来执行命令的路径。cron任务的输出被邮寄给MAILTO变量定义的用户名。如果MAILTO变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME变量可以用来设置在执行命令或脚本时使用的主目录。

/etc/crontab文件中的每一行都代表一项任务,它的格式如下:

Minute   hour  day month dayofweek command

●minute:分钟,0~59之间的任何整数。

●hour:小时,0~23之间的任何整数。

●day:日期,从1~31之间的任何整数(如果指定了月份,必须是该月份的有效日期)。

●month:月份,1~12之间的任何整数(或使用月份的英文简写如jan,feb等)。

●dayofweek:星期,0~7之间的任何整数,这里的0或7代表星期日(或使用星期的英文简写如sun,mon等)。

●command:要执行的命令。

在以上任何值中,星号(*)可以用来代表所有有效的值。如月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线"-"指定一个整数范围。譬如,1-4意味着整数1,2,3,4。

用逗号","隔开的一系列值指定一个列表。譬如,3,4,6,8标明这4个指定的整数。

正斜线"/"可以用来指定间隔频率。在范围后加上/<integer>意味着在范围内可以跳过integer。譬如,“0-59/2”可以用来在分钟字段上定义时间间隔为两分钟。间隔频率值还可以和星号一起使用。例如,"*/3"的值可以用在月份字段中表示每3个月运行一次任务。

二.crontab命令实现自动化

(1).crontab命令简介

root以外的用户可以使用crontab命令配置cron任务。所有用户定义的crontab都被保存在/var/spool/cron目录中,并使用创建它们的用户身份来执行。

以某位用户身份创建一个crontab项目,登录为该用户,然后键入“crontab -e”命令,使用由VISUAL或EDITOR环境变量指定的编辑器来编辑该用户的crontab。该文件使用的格式和/etc/crontab相同。当对crontab所做的改变保存后,该crontab文件会根据该用户名被保存在文件/var/spool/cron/<username>中。

cron守护进程每分钟都检查/etc/crontab文件、/etc/cron.d/目录以及/var/spool/cron目录中的改变。如果发现了改变,它们就会被载入内存。当某个crontab文件改变后就不必重新启动守护进程了。

crontab命令的语法是:

Crontab [-u 用户名] -e -l -r

命令中各参数的含义如下:

-u:用户名,如果使用自己的名字登录,就不用使用“-u”选项。

-e:编辑crontab文件。

-l:列出crontab文件。

-r:删除crontab文件。

(2).控制对cron的使用

/etc/cron.allow和/etc/cron.deny文件被用来限制对cron的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,crond守护进程不必被重启。使用控制文件在每次用户添加或删除一项cron任务时都会被读取。

无论使用控制文件中的规定如何,根用户都可以使用cron。

如果cron.allow文件存在,只有其中列出的用户才被允许使用cron,并且cron.deny文件会被忽略。

(3).启动和停止服务

启动cron服务,需要使用"service crond start"命令。停止该服务,需要使用"service crond stop"命令,具体操作如下所示:

[[email protected] ~]# service crond stop

Stopping crond:                                            [  OK  ]

[[email protected] ~]# service crond start

Starting crond:                                            [  OK  ]

[[email protected] ~]#

(3).创建crontab文件

在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。

cron进程根据它来确定使用那个编辑器编辑crontab文件。编辑用户宿主目录下的.bash_profile文件,在其中加入如下代码。

EDITOR=vi;export EDITOR

然后保存退出。

接下来创建新的crontab文件,该文件提交给crond进程,它将每隔15分钟运行一次。同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名。

例1:

[[email protected] ~]# cat a.sh

#!/bin/bash

mkdir yangtab

[[email protected] ~]# crontab -e

* * * * * ./a.sh

[[email protected] ~]# ls

anaconda-ks.cfg  install.log         root

a.sh             install.log.syslog  sqldeveloper-4.0.1.14.48-1.noarch.rpm

Desktop          Music               Templates

Documents        Pictures            Videos

Downloads        Public              yangtab

[[email protected] ~]#

如上所示,过一分钟就会自动创建yangtab目录。(创建目录yangtab后就不再会创建了,除非删除目录yangtab目录)。

三.使用at实现自动化

cron命令被用来调度重复的任务,而at命令被用来在指定时间内调度一次性的任务。

1.at简介

一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,该作业的所有输出都将以电子邮件的形式发送给用户。

和crontab一样,root用户可以通过/etc目录下的at.allow和at.deny文件来控制哪些用户可以使用at命令,在使用at命令之前必须安装at的RPM软件包,并且atd服务必须在运行,使用如下命令:

[[email protected] ~]# rpm -qa at

at-3.1.10-43.el6_2.1.x86_64

You have new mail in /var/spool/mail/root

[[email protected] ~]#

[[email protected] ~]# service atd status

atd (pid  2151) is running...

[[email protected] ~]#

//查看atd服务是否运行

2.配置at作业

要在某一指定时间内调度一项一次性作业,可以输入"at[时间]"命令,必须先指定时间,接着指定日期。

命令语法:

At [-f script] [-m -l -r] [time] [date]

该命令中各参数的含义如下。

-f script:所要提交的脚本或命令。

-l:列出当前所有等待运行的作业,与atq命令具有相同的作用。

-r:清除某个作业,还要提供相应的作业标识(ID)。

-m:作业完成后给用户发邮件。

Time:at命令的时间格式。

Date:日期格式可以是月份或日期数。

时间参数可以是下面格式中任何一种。

●HH:MM格式,例如,04:00代表4:00AM。如果时间已过,它就会在第二天的这一时间执行。

●Midnight:代表12:00AM。

●Noon:代表12:00PM。

●Teatime:代表4:00PM。

●英文月名 日期 年份 格式:譬如,January 15 2002代表2002年1月15日,年份可有可无。

●MMDDYY,MM/DD/YY或MM.DD.YY格式:譬如,011502代表2002年1月15日。

●now+时间:时间以minutes,hours,days或weeks为单位,譬如“now+5 days”代表命令在5天之后的此时此刻执行。

输入了at命令和它的时间参数后,“at>”提示就会出现。输入要执行的命令,按“回车”键,然后按[Ctrl+D]键。在此可以指定多条命令,方法是键入每一条命令后按“回车”键。输入所有命令后,按“回车”键转入一个空行,然后再输入[Ctrl+D]。

例:在5分钟之后的此时此刻将/root/a文件复制到/home目录下。

[[email protected] ~]# at now +5 minutes

at> ./a.sh

也可以在提示后输入shell脚本,在脚本的每一行后按"回车"键,然后在空行处按[Ctrl+D]键退出。

3.使用at命令提交命令或脚本

使用at命令提交作业有几种不同的形式,可以通过命令行方式,也可以使用at命令提示符。一般来说在提交若干行的系统命令时,使用at命令提示符方式,而在提交shell脚本时,使用命令行方式。

如果想提交若干行的命令,可以在at命令后面跟上日期/时间并回车。然后就进入了at命令提示符,这时只需逐条输入相应的命令,然后按[Ctrl+D]键退出。

如果希望向at命令提交一个shell脚本,使用其命令行方式即可。在提交脚本时使用"-f"选项。

例:使用echo命令向at命令提交作业

[[email protected] ~]# echo hello>/root/a |at now

job 5 at 2015-01-25 05:59

You have new mail in /var/spool/mail/root

[[email protected] ~]# ls

a                Downloads           root

anaconda-ks.cfg  install.log         sqldeveloper-4.0.1.14.48-1.noarch.rpm

a.sh             install.log.syslog  Templates

?[D???           Music               Videos

Desktop          Pictures            yangtab

Documents        Public

4.列出所提交的作业

一个作业被提交后,可以使用"at -l"命令来列出所有的作业。

例:使用“at -l”列出所有作业。

[[email protected] ~]# at -l

6       2015-01-25 06:13 a root

[[email protected] ~]#

其中,第1列是作业标识,后面是作业运行的日期/时间,a代表at,root代表执行此at作业的用户。

还可以使用atq命令来完成同样的功能,它是at命令的一个链接。当提交一个作业后,它就被复制到/var/spool/at目录中,准备在预计的时间运行。

[[email protected] ~]# at now +5 minutes

at> echo beijing welcome you! >/root/a

at> <EOT>

job 7 at 2015-01-25 06:20

[[email protected] ~]# atq

7       2015-01-25 06:20 a root

[[email protected] ~]# ls -l /var/spool/at

total 8

-rwx------  1 root   root   2487 Jan 25 06:15 a000070169aedc

drwx------. 2 daemon daemon 4096 Jan 25 06:13 spool

[[email protected] ~]#

//可以看到作业被复制到/var/spool/at目录下

5.清除at作业

要清除某个作业,首先要执行“at -l”命令查看相应的作业标识,然后再清除作业。

命令语法:

Atrm [作业表示号]

At -r [作业表示号]

例:使用命令atrm 删除作业。

[[email protected] ~]# at now +5 minutes

at> rm a.sh -rf

at> <EOT>

job 8 at 2015-01-25 06:26

[[email protected] ~]# at -l

8       2015-01-25 06:26 a root

//可以看到存在一个标识号为8的作业。

[[email protected] ~]# atrm 8

[[email protected] ~]# at -l

[[email protected] ~]#

//可以看到该作业已经删除。

时间: 2024-10-27 14:17:41

Linux 任务计划的相关文章

10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

- 10.23 linux任务计划cron - 10.24 chkconfig工具 - 10.25 systemd管理服务 - 10.26 unit介绍 - 10.27 target介绍 - 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226  2. xinetd服(默认机器没有安装这个服务,需要yum install xinetd安装) http://blog.sina.com.cn/s/blog_46

Linux 任务计划,周期性任务执行

Linux 任务计划.周期性任务执行 概述: 什么是任务计划呢?就像我们每个人日常生活中都会使用到的闹钟一样,按时的去提醒该去做什么事情,以免忘记.同样,我们在工作当中也要在每天在特定的时间内安排做一些事情,这就是任务计划,本章将学习如何制定Linux系统的任务计划,这里主要包括两种工具:at和crontab. 一.定义 1.任务计划的分类:      一次性的任务计划:只执行一次就结束:      周期性的任务计划:每隔一定的时期去做相同的事情:2.使用的命令      未来时间点执行一次某任

linux任务计划

linux任务计划 须知:linux任务计划每次执行的结果包括错误都会以邮件格式发送给管理员,所以必须安装邮件服务,来查看任务执行结果 1.电子邮件服务: smtp: simple mail transmission protocol /var/spool/mail/USERNAME pop3: post office protocol imap4: internet mail access protocol mail命令: mail: 进入交互式收发邮件接口: mail -s 'SUBJECT

linux任务计划详解

linux任务计划.周期性任务执行 未来的某个时间点执行一次某任务:at,batch 周期性运行某任务:crontab     执行结果:会通过邮件发给用户 mail 简单使用 查看本地电子邮件服务是否开启         ~]$ netstat -tnlp     ~]$ ss -tnl     确保 127.0.0.1:25 处于监听状态就行 本地电子邮件服务:    smtp:simple mail transmission proticol    pop3:post Office Pro

配置Linux任务计划

标签: 任务计划 linux计划任务 linux任务计划 crontab   分类: Linux Linux有三种计划任务: at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用) cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行) 系统级别的计划任务及其扩展anacron:在一个指定时间间隔错过后自动执行任务 一.at服务:安排一个任务在未来执行,需要一个atd的系统后台进程 #at now+2 minutes 回车 >输入要执行的命令 >ctrl+d

Linux任务计划(crontab)

1.crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令. 可以让计算机在规定的时间内,执行相应的计划. 2.实例 # crontab –e0 6 * * * /root/bin/backup.sh 这样Linux将会在每天早上6点运行 /root/bin/backup.sh 3.命令   crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建.   crontab –l : 显示 crontab 文件.   crontab -r : 删除 c

linux任务计划总结

1.总结Linux系统上的任务计划(at.crontab)的详细使用方法: Linux的计划任务方式有3种 1.batch:由系统自行选择在资源较为空闲时运行指定的任务,不需要指定时间点,这个不常用,就不多介绍了 2.at:用来在指定时刻一次性执行某个任务 用法:at [option]... TIME a)输入后会进入at>命令提示符环境, b)输入需要执行的任务,然后输入ctrl+d表示提交任务 c)最终结果通过邮件发送给用户,可使用mail命令查看,可通过ss -tnl看邮件25端口是否开启

马哥linux学习(linux任务计划)

在linux上执行任务计划有两点: 1.  在未来时间一次执行某任务计划的命令有at,batch 2.  周期性执行某任务计划有crontab 邮件正文需要交互式方式接受 下面介绍下linux任务计划的命令 At命令: 承载未来时间的某作业 支持使用作业队列 默认为a队列 例如:at now+3minute //指定未来时间执行作业 提交作业使用Ctrl+d 常用选项: -q at作业队列 -f 从指定文件中读取要运行的作业 -l 查看作业队列中的等运行作业列表:相当于使用atq命令 -c AT

linux系统计划任务

 linux系统计划任务 /etc/crontab  cron的主配置文件,可以定义PATH cron格式如下: # .----------------分钟 (0 - 59) # |  .------------- 小时 (0 - 23) # |  |  .----------  日 (1 - 31) # |  |  |  .-------  月 (1 - 12) # |  |  |  |  .----   周 (0 - 6) (周日=0 or 7) # |  |  |  |  | # * *

Linux达人计划

Linux 达人计划 Linux 达人计划 Linux 应用领域 Linux 与 Windows 的不同 系统分区类型 分区设备文件名与挂载 Linux 树形结构 挂载 CentOS 63 常用命令 查询目录中内容 文件处理命令 其他帮助命令 shell基础 1.Linux 应用领域 企业服务器方面 www.netcraft.com 检测网站后台服务相关信息 (国外站点) 嵌入式应用方面 Android XXXSSHd 远程安全管理 (QuickSSHd) Linux 与 Windows 的不同