Linux下定时执行任务的方法

2016/06/11 11:30
阅读数 169

在 Linux 中你应该先输入 crontab -e,然后就会有个 vi 编辑界面,再输入 0 3 * * 1 /clearigame2 内容到里面 :wq 保存退出。

在 Linux 中,周期执行的任务一般由 cron 这个守护进程来处理 [ps -ef|grep cron]。cron 读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron 的配置文件称为 “crontab”,是 “cron table” 的简写。

一、cron 配置文件

1. /var/spool/cron/ 这个目录下存放的是每个用户包括 root 的 crontab 任务,每个任务以创建者的名字命名,比如 pi 建的 crontab 任务对应的文件就是在 /var/spool/cron/crontabs/pi。一般一个用户最多只有一个crontab文件。

2. /etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的 crontab。

3. /etc/cron.d/ 这个目录用来存放任何要执行的 crontab 文件或脚本。

二、权限

crontab 权限问需要查看文件 /etc/cron.allow 和 /etc/cron.deny 是否存在。

用法如下:

1. 如果两个文件都不存在,则只有 root 用户才能使用 crontab 命令。

2. 如果 cron.allow 存在但 cron.deny 不存在,则只有列在 cron.allow 文件里的用户才能使用 crontab 命令,如果 root 用户也不在里面,则 root 用户也不能使用 crontab。

3. 如果 cron.allow 不存在, cron.deny 存在,则只有列在 cron.deny 文件里面的用户不能使用 crontab 命令,其它用户都能使用。

4、如果两个文件都存在,则列在 cron.allow 文件中而且没有列在 cron.deny 中的用户可以使用 crontab,如果两个文件中都有同一个用户,以 cron.allow 文件里面是否有该用户为准,如果 cron.allow 中有该用户,则可以使用 crontab 命令。

三、cron服务

cron 是一个 Linux 下的定时执行工具,可以在无需人工干预的情况下运行作业。

/sbin/service crond start    //启动服务
/sbin/service crond stop     //关闭服务
/sbin/service crond restart  //重启服务
/sbin/service crond reload   //重新载入配置
/sbin/service crond status   //查看服务状态 

四、crontal 文件

该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。

每个域之间使用空格或者制表符分隔。格式如下:

minute hour day-of-month month-of-year day-of-week commands 

合法值

00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)

除了数字还有几个个特殊的符号就是 "*"、"/" 和 "-"、","。*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。


几个例子:

每天早上6点 

0 6 * * * echo "Good morning." >> /tmp/test.txt

注意单纯 echo,从屏幕上看不到任何输出,因为cron把任何输出都 email 到 root 的信箱了。

每两个小时

0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

晚上11点到早上8点之间每两个小时和早上八点

0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 command line

1月1日早上4点

0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root

如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 

每小时执行/etc/cron.hourly内的脚本

01 * * * * root run-parts /etc/cron.hourly

每天执行/etc/cron.daily内的脚本

02 4 * * * root run-parts /etc/cron.daily 

每星期执行/etc/cron.weekly内的脚本

22 4 * * 0 root run-parts /etc/cron.weekly 

每月去执行/etc/cron.monthly内的脚本

42 4 1 * * root run-parts /etc/cron.monthly 

注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。   

每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。

5,15,25,35,45,55 16,17,18 * * * command

每周一,三,五的下午 3:00 系统进入维护状态,重新启动系统。

00 15 * * 1,3,5 shutdown -r +5

每小时的10分,40分执行用户目录下的 innd/bbslin 这个指令:

10,40 * * * * innd/bbslink 

每小时的1分执行用户目录下的 bin/account 这个指令:

1 * * * * bin/account

每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):

20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62 ;expire.1st)

每年的一月和四月,4号到9号的3点12分和3点55分执行 /bin/rm -f expire.1st 这个指令,并把结果添加在 mm.txt 这个文件之后(mm.txt文件位于用户自己的目录位置)。 

12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62 ;$#@62 ;mm.txt

五 at 命令

at 命令实现定时任务

假如我们只是想要让特定任务运行一次,那么,这时候就要用到 at 监控程序了。

at 类似打印进程,会把任务放到 /var/spool/at 目录中,到指定时间运行它 。at 命令相当于另一个 shell,运行 at time 命令时,它发送一个个命令,可以输入任意命令或者程序。
at 命令执行流程如下

# at 2:05 tomorrow
at>/home/kyle/do_job
at> Ctrl+D


AT Time中的时间表示方法

  -----------------------------------------------------------------------
  时 间 例子 说明
  -----------------------------------------------------------------------
  Minute    at now + 5 minutes   任务在5分钟后运行
  Hour      at now + 1 hour      任务在1小时后运行
  Days      at now + 3 days      任务在3天后运行
  Weeks     at now + 2 weeks     任务在两周后运行
  Fixed     at midnight          任务在午夜运行
  Fixed     at 10:30pm           任务在晚上10点30分

注意:linux 默认为不启动,而 ubuntu 默认为启动的。检查是否启动,用 service atd 检查语法,用 service atd status 检查 atd 的状态,用 service atd start 启动 atd 服务。

查看 at 执行的具体内容:一般位于 /var/spool/at 目录下面, 用 vi 打开,在最后一部分就是你的执行程序。

参数详解

-V : 印出版本编号 

-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 

-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者 

-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 

 

网络应用

-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) 
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) 
-v : 列出所有已经完成但尚未删除的指定 

删除任务

atrm 2


三天后的下午 5 点执行 /bin/ls : 

at 5pm 3 days /bin/ls 

三个星期后的下午 5 点锺执行 /bin/ls : 

at 5pm 2 weeks /bin/ls 

明天的 17:20 执行 /bin/date : 

at 17:20 tomorrow /bin/date 

1999 年的最后一天的最后一分钟印出 the end of world ! 

at 23:59 12/31/1999 echo the end of world !

 

展开阅读全文
打赏
0
15 收藏
分享
加载中
nocnob博主

引用来自“Lailysh”的评论

第一眼就觉的是干那啥的。。
定时动弹0
2016/06/15 15:19
回复
举报
第一眼就觉的是干那啥的。。
2016/06/15 14:15
回复
举报
mark
2016/06/11 20:14
回复
举报
更多评论
打赏
3 评论
15 收藏
0
分享
返回顶部
顶部