首页 » 信息技术 »

Linux系统的cron定时任务

2019年5月17日 / 34次阅读
Linux

cron是一个 linux 系统内置的定时执行任务的工具,最小精确到一分钟(也可以按秒来控制,后文有介绍)。它的实现有很多版本,不同版本间有些许的功能差异。与它相关的有两个工具:crond 和 crontab。crond 就是 cron 在系统内的宿主程序,crontab 是管理 cron 任务的管理工具。

cron定时规则

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                     7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute

每条记录一般是:5 个时间点 + 执行的命令。其中 * 是特殊的,它表示任何情况均匹配。

几个例子:

# 在每个小时的第一分钟执行 `echo "maixj.net" >> 111.txt`。
1 * * * * echo "maixj.net" >> 111.txt

# 每 2 分钟执行一次 `echo "hello world" >> a.txt`。
*/2 * * * * echo "hello world" >> a.txt

# 在每个星期 6 的 23 点 45 分执行这个脚本。
45  23 * * 6 /home/xinlin/test.sh

每分钟用*或者 */1表示。

你可以通过 crontab -e 修改添加。crontab -h 查看帮助。

关于cron.allow和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命令。

每半小时执行一次

0 0/30 * * * cmd

每月有多天执行

m h 2,15 * * cmd

每月2号和15号的HH:MM执行cmd。

更多时间设置方法,请查阅man 5 crontab

执行定时任务的方法

上面的介绍可以看出,cron的最小单位是分钟,其实我们也可以字分钟内,按秒来执行定时任务。下面的示例,就是每10秒钟执行一次任务的方法:

# crontab -e
* * * * * /bin/date >>/tmp/date.txt
* * * * * sleep 10; /bin/date >>/tmp/date.txt
* * * * * sleep 20; /bin/date >>/tmp/date.txt
* * * * * sleep 30; /bin/date >>/tmp/date.txt
* * * * * sleep 40; /bin/date >>/tmp/date.txt
* * * * * sleep 50; /bin/date >>/tmp/date.txt

各位可以以此类推!举一反三.....:)

在定时任务中发送Email

定时任务常常伴随着将执行结果发送email log到相关责任人,这是自动化运维的很重要的一方面。本站有两篇介绍如何在命令行下面使用mail程序发送邮件的文章,希望能帮到需要的人:

使用Ubuntu系统的mail程序发送邮件

使用CentOS系统的mail程序发送邮件

对于特定目的的服务器来说,建议在使用mail发邮件时,配置系统级的配置文件,因为有一些cron定时任务,可能是放在root下的。

cron定时任务的执行时间与date显示的系统时间不一致

这是我最近遇到的一个问题,Godaddy的VPS服务器,时区默认是美国,因此修改系统时区,做时间同步。这时,我发现自己设置的cron任务与date显示出来的系统时间差别很大。查阅了一些资料后,原因是修改了时区,一定要重启cron进程:$ sudo service crond restart

本文链接:https://www.maixj.net/ict/cron-21380

相关文章

留言区

《Linux系统的cron定时任务》有3条留言

  • 麦新杰

    cron定时任务的执行时间,与date显示出来的系统时间不一致,请重启crond服务,sudo service crond restart []

  • 麦新杰

    查看root用户的crontab:

    $sudo crontab -l
     []

  • 麦新杰

    $crontab -l
    -l就是查看,很多命令都是使用-l。 []


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top