Linux 下的定时任务实现 at 和 crontab

定时执行一次 at

atd 服务

要想使用at命令,需要先打开atd服务

sudo atd

简单例子

添加到时执行任务

user@linux-msx4:~> at now + 1 hour          ## at + 定时时间
warning: commands will be executed using /bin/sh
at> test_at.sh                              ## 输入想要执行的命令或脚本                                                
at> <EOT>                                   ## Ctrol +D 结束
job 10 at Thu Nov 12 12:16:00 2015       ##显示这个任务简介

查看当前尚未执行任务

user@linux-msx4:~> atq
7       Fri Nov 13 10:11:00 2015 a user
10      Thu Nov 12 12:16:00 2015 a user

删除尚未执行任务

user@linux-msx4:~> atrm 7
user@linux-msx4:~> atq
10      Thu Nov 12 12:16:00 2015 a user

文件查看当前执行任务

sudo ls /var/spool/atjobs/

限制用户使用at

将被限制的用户名字写入 /etc/at.deny

基本命令参数解析 :

  • -m : 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
  • -I : atq的别名
  • -d : atrm的别名
  • -v : 显示任务将被执行的时间
  • -c : 打印任务的内容到标准输出
  • -V : 显示版本信息
  • -q : 后面加<列队> 使用指定的列队
  • -f : 后面加<文件> 从指定文件读入任务而不是从标准输入读入
  • -t : 后面<时间参数> 以时间参数的形式提交要运行的任务

时间表示

时间:定义出什么时候要进行at的任务,格式有:

  1. HH:MM
    说明:在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。
    ex> 04:00

  2. HH:MM YYYY-MM-DD
    说明:规定在某年某月的某一天的特殊时刻进行该项任务
    ex> 04:00 2009-03-17

  3. HH:MM[am|pm] [Month] [Date]
    说明:规定在某年某月某日的某时刻进行该项任务
    ex> 04pm March 17

  4. HH:MM[am|pm] + number [minutes|hours|days|weeks]
    说明:规定在某个时间点再加多少时间后才进行该项任务
    ex> now + 5 minutes
    ex> 04pm + 3 days

时间格式扩展:
at允许使用一套相当复杂的指定时间的方法。

  1. 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。
  2. 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
  3. 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。
  4. 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。
  5. 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。
  6. 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

定时循环执行 crontab

crond 服务

sudo service crond start

 简单例子 

创建、编辑和维护定时任务

crontab -e # 此时打开vim界面 , 编辑本用户的crontab文件
#比如vim中添加 : 
# 分          时               天              周               月       命令
*/1            *               *               *               *     echo `date`>>/home/user/test.txt

查看定时任务

user@linux-msx4:~> crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.B7p3lx installed on Thu Nov 12 14:01:14 2015)
# (Cronie version 4.2)
*/1            *               *               *               *     echo `date`>>/home/user/test.txt

删除所有crontab定时任务

user@linux-msx4:~> crontab -r
user@linux-msx4:~> crontab -l
no crontab for user
user@linux-msx4:~>

编辑 /etc/crontab 维护定时任务 

格式比crontab在command之前多了username : 

*/1            *               *               *               *     user  echo `date`>>/home/user/test.txt

常用命令参数

  • -u 指定一个用户

  • -l 列出某个用户的任务计划

  • -r 删除某个用户的任务

  • -e 编辑某个用户的任务

编辑命令格式

crontab -e
>  Minute      Hour  Day   Month    Dayofweek   command
      分钟     小时   天     月       天每星期       命令
vim /etc/crontab
   Minute      Hour Day     Month  Dayofweek   Username  command
      分钟     小时   天     月       天每星期      用户        命令
符号
  • “*”代表取值范围内的数字,
  • “/”代表”每”,
  • “-”代表从某个数字到某个数字,
  • “,”分开几个离散的数字
例子
    5       *       *           *     *     ls          #   指定每小时的第5分钟执行一次ls命令
    30     5       *           *     *     ls           #  指定每天的 5:30 执行ls命令
    30     7       8         *     *     ls             # 指定每月8号的730分执行ls命令
    30     5       8         6     *     ls             #指定每年的68530执行ls命令
    30     6       *           *     0     ls           #  指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值