精通Linux系列十七:定时任务

admin 2023-10-14 615 阅读 0评论

定时任务


命令含义
sleep等待一定的秒数,不做任何事情。
watch在设定的间隔时间里运行一个程序。
at安排一个在未来某个时间点只运行一次的任务。
crontab安排在未来多个时间点运行的任务。


如果你需要在特定的时间或者固定的间隔里启动程序,Linux 提供了几种不同复杂度的定时工具。

sleep

stdin  stdout  - file  -- opt  --help  --version*

sleep 时间指定

sleep命令只是简单地等待一定的时间。给定的时间指定可以是整数(表示秒)或者一个整数后面跟着字母s(也是秒)、m(分钟)、h(小时)或者d(天)。比如:

→ sleep 5m              闲置 5 分钟

sleep在你需要延迟一个命令一定的时间时很有用:

 sleep 10 && echo '十秒过去了。'
(10 秒过去了)
十秒过去了。

watch

stdin  stdout  - file  -- opt  --help  --version*

watch [选项] 命令

watch程序在设定的间隔执行给定的命令,默认是每两秒。命令被传给 shell(所以要确保引用或转义任何特殊字符),结果在全屏模式下显示,这样你就可以方便地观察输出并看到有什么变化。例如,watch -n 60 date 每分钟执行一次 date 命令,可以看作是一个简易时钟。按 ^C 退出。

有用的选项


-n seconds设置执行间隔时间,以秒为单位。
-d高亮输出中的差异,强调从一个执行到下一个执行过程中有什么变化。
-g当命令产生的输出与上一次执行的输出不同时退出。


at

stdin  stdout  - file  -- opt  --help  --version

at [选项] 时间指定

at命令在指定的时间只运行一次 shell 命令:

 at 7am next sunday
at> echo 记得去购物 | mail smith
at> lpr $HOME/shopping-list
at> ^D
<EOT>
job 559 at 2015-09-14 21:30

at所能理解的时间指定非常灵活。一般来说,你可以指定:

  • • 时间后跟日期(而不是日期后跟时间)

  • • 仅日期(默认为当前时钟时间)

  • • 仅时间(默认为最近的一次,无论是今天还是明天)

  • • 诸如now(现在)、midnight(午夜)或teatime(16:00)等特殊词语

  • • 以上任意一种后面跟一个偏移量,如“+ 3 days”

日期可以有多种形式:december 25 201525 december 2015december 2525 december12/25/201525.12.201520151225todaythursdaynext thursdaynext monthnext year等等。月份的名称可以缩写为三个字母(janfebmar等等)。时间也很灵活:8pm8 pm8:00pm8:00 pm20:002000都是等价的。偏移量是一个加号或减号后面跟着空白和一段时间:+ 3 seconds+ 2 weeks- 1 hour等等。

如果你没有指定日期或时间的一部分,at会从系统日期和时间中复制缺失的信息。所以“next year”(明年)表示从现在起的一年,“thursday”(星期四)表示接下来的星期四在当前的时钟时间,“december 25”(12月25日)表示接下来的12月25日,“4:30pm”(下午4:30)表示未来最早的一次下午4:30。

你提供给at的命令在执行时才会被 shell 评估,所以通配符、变量和其他 shell 构造直到那时才会展开。而且,你当前的环境(参见 printenv)在每个任务中都会被保留,所以它执行的就像你已经登录了。然而,别名在at任务中不可用,所以不要包含它们。

要列出你的at任务,使用 atq (“at queue”):

 atq
559  2015-09-14 07:00 a smith

要删除一个 at 作业,请运行 atrm(“at 删除”)并附带作业编号:

→ atrm 559

实用选项


-f 文件名从给定文件而不是标准输入中读取命令。
-c 作业编号将作业命令打印到标准输出。


crontab

stdin  stdout  - file  -- opt  --help  --version

crontab [options] [file]

crontab命令就像 at 命令一样,可以为特定时间安排作业。但是,crontab是用于重复的作业,例如“每月第二个星期二的午夜运行这个命令。”为了实现这一点,你编辑并保存一个文件(称为你的 crontab 文件),它会自动安装在一个系统目录(*/var/spool/cron*)中。每隔一分钟,一个名为 cron的Linux进程就会醒来,检查你的 crontab 文件,并执行任何到期的作业。

  • • → **crontab -e**在默认编辑器($VISUAL)中编辑你的 crontab 文件。

  • • → **crontab -l**在标准输出上打印你的 crontab 文件。

  • • → **crontab -r**删除你的 crontab 文件。

  • • → **crontab myfile**将文件 myfile 安装为你的 crontab 文件。

超级用户可以添加选项 -u 用户名 来处理其他用户的 crontab 文件。

Crontab 文件每行包含一个作业。(空行和以“#”开头的注释行被忽略。)每行有六个字段,用空格隔开。前五个字段指定运行作业的时间,最后一个是作业命令本身。

  • • 小时内的分钟数介于 0 和 59 之间的整数。这可以是一个数字(30),用逗号隔开的一系列数字(0,15,30,45),一个范围(20–30),一系列范围(0-15,50-59),或一个星号表示“全部”。你也可以用后缀 /n 指定“每 n 次”;例如,*/12 和 0-59/12 都表示 0,12,24,36,48(即,每 12 分钟一次)。

  • • 一天中的小时数和分钟的语法一样。

  • • 月份中的日期介于 1 和 31 之间的整数;再次,你可以使用序列,范围,范围序列,或星号。

  • • 一年中的月份介于 1 和 12 之间的整数;再次,你可以使用序列,范围,范围序列,或星号。另外,你可以使用三个字母的缩写(janfebmar...),但不能在范围或序列中使用。

  • • 一周中的日期介于 0(星期日)和 6(星期六)之间的整数;再次,你可以使用序列,范围,范围序列,或星号。另外,你可以使用三个字母的缩写(sunmontue...),但不能在范围或序列中使用。

  • • 要执行的命令任何shell命令,将在你的登录环境中执行,所以你可以引用像 $HOME 这样的环境变量并期望它们能工作。使用你的命令的绝对路径(例如,用 /usr/bin/who 而不是 who)以确保 cron 运行的是正确的程序,因为一个 Linux 系统可能有几个同名的程序。

以下是一些示例时间规格:


*    *    *    *    *每分钟
45   *    *    *    *每小时后的 45 分钟(1:45,2:45 等)
45   9    *    *    *每天上午 9:45
45   9    8    *    *每个月的第八天上午 9:45
45   9    8    12   *每年 12 月 8 日上午 9:45
45   9    8    dec  *每年 12 月 8 日上午 9:45
45   9    *    *    6每周六上午 9:45
45   9    *    *    sat每周六上午 9:45
45   9    *    12   6每年 12 月的每个周六上午 9:45
45   9    8    12   6每年 12 月的每个周六以及 12 月 8 日上午 9:45


如果命令在执行时产生任何输出,cron 会将其发送到你的邮箱(或更准确地说,发送到该 crontab 文件的所有者的邮箱)。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 615人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表