Linux 任务计划
一.配置cron实现自动化
使用cron实现任务自动化可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的。
1./etc/crontab文件实现自动化
cron守护进程可以在无需人工干预的情况下根据时间、日期、月份和星期的组合来调度执行重复任务的守护进程。
要使用cron服务,必须安装了vixie-cron-4.2-4.fc8软件包,而且必须运行crond服务,可以使用如下命令查询软件包安装和服务运行的情况。
[root@redhat2 ~]# rpm -qa |grep vixie-cron
//查看是否安装vixie-cron软件包。
[root@redhat2 ~]# service crond status
crond (pid 2179) is running...
[root@redhat2 ~]#
//查看crond服务运行状态。
cron的主配置文件是/etc/crontab,该文件内容如下。
[root@redhat2 ~]# 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"命令,具体操作如下所示:
[root@redhat2 ~]# service crond stop
Stopping crond: [ OK ]
[root@redhat2 ~]# service crond start
Starting crond: [ OK ]
[root@redhat2 ~]#
(3).创建crontab文件
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。
cron进程根据它来确定使用那个编辑器编辑crontab文件。编辑用户宿主目录下的.bash_profile文件,在其中加入如下代码。
EDITOR=vi;export EDITOR
然后保存退出。
接下来创建新的crontab文件,该文件提交给crond进程,它将每隔15分钟运行一次。同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名。
例1:
[root@redhat2 ~]# cat a.sh
#!/bin/bash
mkdir yangtab
[root@redhat2 ~]# crontab -e
* * * * * ./a.sh
[root@redhat2 ~]# 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
[root@redhat2 ~]#
如上所示,过一分钟就会自动创建yangtab目录。(创建目录yangtab后就不再会创建了,除非删除目录yangtab目录)。
三.使用at实现自动化
cron命令被用来调度重复的任务,而at命令被用来在指定时间内调度一次性的任务。
1.at简介
一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,该作业的所有输出都将以电子邮件的形式发送给用户。
和crontab一样,root用户可以通过/etc目录下的at.allow和at.deny文件来控制哪些用户可以使用at命令,在使用at命令之前必须安装at的RPM软件包,并且atd服务必须在运行,使用如下命令:
[root@redhat2 ~]# rpm -qa at
at-3.1.10-43.el6_2.1.x86_64
You have new mail in /var/spool/mail/root
[root@redhat2 ~]#
[root@redhat2 ~]# service atd status
atd (pid 2151) is running...
[root@redhat2 ~]#
//查看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目录下。
[root@redhat2 ~]# 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命令提交作业
[root@redhat2 ~]# echo hello>/root/a |at now
job 5 at 2015-01-25 05:59
You have new mail in /var/spool/mail/root
[root@redhat2 ~]# 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”列出所有作业。
[root@redhat2 ~]# at -l
6 2015-01-25 06:13 a root
[root@redhat2 ~]#
其中,第1列是作业标识,后面是作业运行的日期/时间,a代表at,root代表执行此at作业的用户。
还可以使用atq命令来完成同样的功能,它是at命令的一个链接。当提交一个作业后,它就被复制到/var/spool/at目录中,准备在预计的时间运行。
[root@redhat2 ~]# at now +5 minutes
at> echo beijing welcome you! >/root/a
at> <EOT>
job 7 at 2015-01-25 06:20
[root@redhat2 ~]# atq
7 2015-01-25 06:20 a root
[root@redhat2 ~]# 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
[root@redhat2 ~]#
//可以看到作业被复制到/var/spool/at目录下
5.清除at作业
要清除某个作业,首先要执行“at -l”命令查看相应的作业标识,然后再清除作业。
命令语法:
Atrm [作业表示号]
At -r [作业表示号]
例:使用命令atrm 删除作业。
[root@redhat2 ~]# at now +5 minutes
at> rm a.sh -rf
at> <EOT>
job 8 at 2015-01-25 06:26
[root@redhat2 ~]# at -l
8 2015-01-25 06:26 a root
//可以看到存在一个标识号为8的作业。
[root@redhat2 ~]# atrm 8
[root@redhat2 ~]# at -l
[root@redhat2 ~]#
//可以看到该作业已经删除。
Linux 任务计划的更多相关文章
- Linux任务计划
Linux任务计划: 一次性任务执行(at.batch): at:定时任务,指定一个时间执行一个任务,只能执行一次. at使用方式: 交互式:让用户在at>提示符输入多个要执行的命令: 批处理: ...
- 配置Linux任务计划
Linux有三种计划任务: at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用) cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行) 系统级别的计划任务及其扩 ...
- Linux操作系统计划任务
++++++++++++++++++++++++++++++++++++++++++++++++标题:Linux操作系统的计划任务内容:计划任务分为单次任务和周期性任务,周期任务分为系统级计划任务和用 ...
- Linux中计划任务、周期性任务设置
Linux中计划任务.周期性任务设置 计划任务:指在未来的特定时间里,执行一次某一特定任务.当然,如果同一任务需要在不同时间点执行执行两次.三次或多次,可以视为多个一次看待. 周期性任务:指某一任务需 ...
- Linux定时任务计划
Linux定时任务计划 在使用Linux系统时,我们有时会需要让系统在某个时间去执行特定的任务,这时就需要去了解Linux提供的定时任务功能 种类 Linux的定时任务分为两种:单一型和循环型 单一型 ...
- linux 的计划任务 定时任务
linux的计划任务,也叫做定时任务 https://www.cnblogs.com/mingforyou/p/3930636.html 名字是crond 查看linux本机的定时任务 crontab ...
- linux任务计划 chkconfig工具 systemd管理服务 unit介绍 target介绍
linux任务计划 任务计划:特定时间备份数据,重启服务,shell脚本,单独的命令等等. 任务计划配置文件:cat /etc/crontab [root@centos7 ~]# cat /etc/c ...
- linux任务计划cron
linux任务计划cron 1.crontab命令任务计划配置文件 [root@bogon ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/ ...
- Linux任务计划、周期性任务执行
Linux任务计划.周期性任务执行 周期性任务执行: cron 守护进程(crond):服务,不间断地运行于后台 # service crond {start|stop|status|restart} ...
- linux下计划任务学习记录
0x01 计划任务简介 linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond 服务 和 atd 服务: 0x02 只执行一次的计划任务 0x02.1 atd 服务说 ...
随机推荐
- [NOIP2013] 火柴排队(归并排序)
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- quick sort 的简化实现
Pivot 随机选取意义不大 第一种方法使用随机pivot,使得尽可能平均二分序列,而实际上一般来说需要排序的集合往往是乱序的,无需重新生成随机数作为pivot,大可使用固定位置的数作为pivot,这 ...
- C#序列化与反序列化方式简单总结
序列化和反序列化 相关类: System.SerializableAttribute特性(或称为属性), System.Runtime.Serialization.ISerializable(自定义序 ...
- OpenGL法向量变换
OpenGL光照开启时,法向量用于决定特定顶点或面上接受到光照的多少.光照处理过程作用于观察坐标空间,因此,模型对象坐标系的法向量也需要使用GL_MODELVIEW矩阵变换到观察坐标系. 然而,法向量 ...
- apache不断占内存过大,导致虚拟机内存不足,处理方法。
我用512M的vps,访问量不大,但内存占用很大,甚至宕机. 我用top,然后shitf+m发现,httpd占用内存极大.经过网上找资料设置后,用过一段时间终于没再出现内存问题了. 首先查找配置文件的 ...
- mac电脑的使用
1. control + command + a 截图 2. shift + command + g 前往 3.在 Mac OS X 中怎样获取当前文件夹的路径 原文网址:https://www.zh ...
- Python之路,day9-Python基础
回顾:抽象方法@staticmethod 不能访问类的任何属性@classmethod 类方法 只能访问公有属性@property 属性方法 , 把一个方法变成一个静态属性def sayhi() pa ...
- linux根文件系统制作
在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...
- 可以链接不同源的资源的html元素(能实现跨域)
可以链接不同源的资源的html元素(能实现跨域): img.script.css.video.audio.object.embed.applet.@font-face.frame.iframe等. ( ...
- AFNetwork ATS 网络层改造
最近一直做项目的ATS改造,期间遇到了种种问题,各种坑都记录下来, 比如iOS版本.afnetwork版本.证书(是否为自签证书).域名验证.TLS版本等等,我们项目更复杂,还使用了域名到IP映射的路 ...