赞
踩
在系统运维过程中,可能需要在某个预设的时间执行特定任务。比如定时发送邮件、备份并清空日志文件等任务。
任务的内容可以看作是一系列命令或者一个脚本,我们则需要在特定时间去执行它。
at
cron
如果系统未安装 at,则先安装并启动:
yum install -y at
systemctl start at
用户使用 at 命令在指定时刻执行指定的命令序列,该命令至少需要指定一个命令和一个执行时间,可以只指定时间,也可以时间和日期一起指定
at 命令语法:
at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间
at -c 作业[作业...]
at 允许使用一套相当复杂的时间指定方法:
使用相对计时法,对于安排不久后就要执行的命令较为方便:
at 4:30pm
at 16:30
at 16:30 today
at now+4 hours
at now+240 minutes
at 16:30 7.6.15
at 16:30 6/7/15
at 16:30 Jun 7
以上 8 条命令的执行效果完全相同。
配置步骤:
at + 时间
, 输入完成后,进入交互式界面,按 Ctrl + d 结束命令的输入at -f file-name.sh 时间
,可执行特定脚本文件atq
命令查看作业队列atrm
命令可以删除作业队列中的作业,格式为 atrm + 作业号,作业号 为 atq 回显的第一列对于 at 命令来说,需要定时执行的命令是从标准输入或者使用 –f 选项指定的文件中读取并执行的。如果 at 命令是从一个使用 su 命令切换到用户 shell 中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户;对于其他用户来说,是否执行某个命令或脚本取决于 /etc/at.allow 和 /etc/at.deny 文件
at 命令会在指定时间内完成指定任务,但是只能执一次;系统在指定时间完成任务,以后就不再执行了。而在很多情况下需要周期性重复执行一些命令,这时候需要使用 cron 命令来完成任务。
/etc/passwd
文件中的用户名命名的 crontab 文件,然后将 crontab 文件装入内存。比如一个用户名为globus的用户,对应的crontab立件应该是/var/spool/cron/globus,即以该用户命名的crontab文件存放在/var/spool/cron目录下面。/etc/crontab
文件中MAILTO环境变量中指定的用户。这是cron的工作原理,但是cron命令的执行不需要用户干涉,用户只需要修改crontab中要执行的命令。crontab 命令用于安装、删除或者显示用于驱动 cron 后台进程的表格。用户把需要执行的命令序列放到 crontab 文件中以获得执行,而且每个用户都可以有自己的 crontab 文件。
crontab 常用命令:
crontab -u //设置某个用户的cron服务,root用户在执行crontab时需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
在 crontab 文件中输入需要执行的命令和时间,该文件中每行都包括6个域,其中前5个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔,格式如下:
minute hour day-of-month month-of-year day-of-week commands
例:每周一上午 8:00 执行命令
00 08 * * 1 commands
crontab 文件参数补充
例:晚上11点到早上8点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本,在 crontab 文件中对应的行如下:
* 23-8/2 * * * echo"sleepy" >> /tmp/test.txt
注意:每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件。此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e来编辑。用户也可以另外建立一个文件,使用“cron文件名”命令导入cron设置。cron启动后,每过一分钟读一次crontab文件,检查是否要执行里面的命令。因此该文件被修改后不需要重新启动cron服务。
cron 服务每分钟不仅要读一次 /var/spool/cron
内的所有文件,还需要读一次/etc/crontab
。使用 crontab 配置是针对某个用户的,而编辑 /etc/crontab 是针对系统的任务。
此文件的文件格式如下:
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个账号
HOME=/
# run-parts01
* * * * root run-parts /etc/cron.hourly //每个小时执行一次/etc/cron.hourly里的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行一次/etc/cron.daily里的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每周执行一次/etc/cron.weekly里的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月执行一次/etc/cron.monthly里的脚本
注意:如果去掉run-parts参数,其后面就是运行的某个脚本名,而不是目录名。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。