定期执行任务的相关命令
作为一个linux系统运维师,在我们工作的时候需要定期去执行一些脚本或是命令,比如早上几点我们要开启什么服务,我们不可能守在计算机旁等到那个时候去手动执行那些需要脚本或是命令,万一我们没有按时赶到工作场所就会给我们的公司带来巨大的损失,鉴于此,linux给我们提供了一个很好的命令crontab。
在我们学习此命令之前我还会给大家介绍一个临时执行定期任务的命令,此命令只是在未来的时间段内执行一次。
一、在未来的某个时间仅执行一次
# at 和 # batch
时间表示法:
HH:MM(AM,PM)
MM/DD/YY
now + # (minutes,hours,days,weeks
[root@localhost ~]# at now+1minutes
at>
当输入 at now+1minutes 按回车之后会出现at> ,在这之后可以输入你要执行的命令或是脚本,输入完之后按crtl+d ,这些命令执行完之后,系统会给你发mail 。
[root@localhost ~]# at -l 列出任务列表 或是(atq)
2 2012-02-27 21:07 a root
[root@localhost ~]# at -r 2 可以删除未来要执行但尚未执行的任务(atrm job_num)
[root@localhost ~]# at -l 在查看一下列表发现任务以删除
[root@localhost ~]#
[root@localhost ~]# at -f 1.sh now+1minutes 当是一个脚本的时候需要加-f
batch的方法和at的差不多,只是batch 在用的时候不需要指定时间,计算机会根据你的系统运行情况,在资源利用率低,闲下来的时候去执行你给出的命令。
二、定期执行任务的命令 (现在就开始讲今天的重点)
crontab是一个定期执行任务的命令,在使用的时候其实是在编译一个文件
其分为两类,
1. 用户cron 文件在 /var/spool/cron/USERNAME
2. 系统cron 文件在 /etc/crontab
我们先看一些文件中都有什么内容
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
~
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
在这个文件中我们只要关注的是后四行,每一行可以分成7列,像下边的一样,分别表示对应的关系
01 * * * * root run-parts /etc/cron.hourly
分钟 小时 天 月 周几 用户 命令或脚本
其中在普通用户中没有用户那一列,前五列都可以用数字表示,如果用 * 则表示“每”的意思
还有一些特别的表示方法:
非连续的时间点:
15,45 * * * * 每小时的第15分钟和第45分钟执行一次
连续的时间点:
1 8—18 * * * 从8点到18点每小时执行一次
*/#
*/3 * * * * 每隔三分钟执行一次
[root@localhost ~]# crontab -e 可以打开一个编译文件,这是普通用户
[root@localhost ~]# crontab -l 列出自己的任务计划
*/3 * * * * /sbin/hwclock -s
做为管理员可以为普通用户定义计划
#crontab -u name -e
其中在我们在执行命令之后在文件中写的命令,要把命令的路径给指出来,因为系统不识别,还要注意的是如果是一个脚本的话,脚本里的命令也要指出其全路径
我们可以通过如下命令来获取每个命令的路径
[root@localhost ~]# which useradd 查看其在那个目录里
/usr/sbin/useradd
[root@localhost ~]# rpm -qf /usr/sbin/crond 查看命令是由那个包安装之后实现的
vixie-cron-4.1-76.el5
我们在将一些其他的查看命令
[root@localhost ~]# chkconfig --list 查看服务列表
当我们学会了怎样运用crontab命令之后,我们思考一下,其实这个命令是有一些漏洞的,当我们的电脑关机之后,写在文件中的命令,电脑是不会执行的,也就是我们的定期任务不能顺利的完成,所以在有些时候会出现一些问题的。但我们的linux大多是作为服务器的,机器压根就不回随便的重启或是关机,所以这个命令已经足够对付我们工作是的任务了。
但为了满足一些linux各人发烧有的要求,在此我还是给大家说一个在我们的电脑关机之后系统仍然会执行定期任务的命令anacron,
anacron (即使电脑关机任务依然执行)只有定义了计划 才能启动其服务
其文件在/etc/anacrontab
1 65 cron.daily run-parts /etc/cron.daily
1表示曾经过去多少天没有执行的任务 65系统开机多长分钟执行没执行的任务
今天除了这些之外我在给大家说一个小命令 hwclock
#hwclock -w 将date写入clock
-s 将clock写入date
date是当前系统的时间,有时候会不稳定,
clock貌似是 biso时间一般都是很稳定的,所以就有了上述的命令,来更改我们错乱的时间,也可以将一个命令写在定期任务里边,来使机器开启的时候自动校对时间。
*/3 * * * * /sbin/hwclock -s