如何用crontab每5分钟执行一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用crontab每5分钟执行一次相关的知识,希望对你有一定的参考价值。

一、创建存放shell脚本的文件夹

[root@data]# mkdir shell

二、编写shell脚本

使用vim、nano、vi等任意文本编辑工具,都可以编写shell脚本。使用“nano test.sh”在当前目录下,创建一个测试shell脚本。shell脚本的后缀习惯性写成“.sh”。

[root@shell]# vim getdata.sh

脚本内容:

#!/bin/sh

Datetime=$(date "+%Y-%m-%d %H:%M:%S") 

filelog="/data/shell/std.log"              

exec 3< /data/shell/server.cfg

echo "#######################START############################" >>

$filelog

while read server <&3

do

echo "" >> $filelog

echo ">>$Datetime , updategetdata -> $server~" >> $filelog

result=`wget -q -T 5  http://$server:8080/col/  -O -`       

if  [ "$?" == "0" ];then                               

echo ">>$Datetime , update getdata success -> $server~" >> $filelog

else 

echo ">>$Datetime , updategetdata failed -> $server~" >> $filelog

fi

echo "" >> $filelog

echo "" >> $filelog

done

echo "############################END#######################" >> 

$filelog

保存退出:wq! 即可生成shell文件 getdata.shell。

三、对shell脚本添加执行权限。

[root@shell]# chmod 755 getdata.sh

由于新建的shell脚本没有执行权限,首先使用“chmod 755 getdata.sh。

四、创建shell脚本依赖的文件

[root@shell]# vim server.cfg (添加接口用到ip号集合)。

格式:

ip

ip  

........

[root@shell]# vim  std.log

六、执行脚本测试

[root@shell]# ./getdata.sh

七、添加到定时任务

[root@shell]# crontab -e (编写后保存即可生效)。

举例:每5分钟执行一次 

*/5 * * * * /bin/bash /data/shell/getdata.sh >/dev/null 2>&1                      

八、查看是否添加进去

[root@shell]#crontab -l 。

1.crontab参数

-u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab

crontab -u 使用者名称

-l:可以列出crontab的内容

-r:可以移除crontab

-e:可以使用系统预设的编辑器,开启crontab

-i:可以移除crontab,会跳出系统信息让你再次确定是否移除crontab

2.crontab时间格式说明

minute(分)可以设置0-59分

hour(小时)可以设置0-23小时

day of month(日期)可以设置1-31号

month(月份):可以设置1-12月

day of week(星期):可以设置0-7星期几,其中0和7都代表星期天,或者我们也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一等等

3.crontab时间格式范例

1-3表示123

1-9/2表示13579

4.crontab范例

每五分钟执行  */5 * * * *

每小时执行    0 * * * *

每天执行      0 0 * * *

每周执行      0 0 * * 0

每月执行      0 0 1 * *

每年执行      0 0 1 1 *

5.介绍crontab文件

/etc/crontab

在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个子目录。

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/etc/cron.monthly

这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本。

参考资料

crontab命令详解 .CSDN博客[引用时间2017-12-28]

定时任务(每5分钟执行一次各机房访问接口).CSDN博客[引用时间2017-12-28]

参考技术A 具体查看crontab参数说明

crontab -e
*/5 * * * * $home/bin/command.sh本回答被提问者和网友采纳

Crontab 每 15 分钟运行一次,除了凌晨 3 点?

【中文标题】Crontab 每 15 分钟运行一次,除了凌晨 3 点?【英文标题】:Crontab run every 15 minutes except at 3AM? 【发布时间】:2012-02-04 13:19:33 【问题描述】:

除了凌晨 3 点以外,是否可以每 15 分钟(每小时等)运行一次 cronjob?

我有另一个特殊的 cronjob 我想在凌晨 3 点运行,但我不希望另一个同时运行...

【问题讨论】:

最简单的方法是让 crontab 执行一个脚本来检查它是否是凌晨 3 点,如果是,就退出。 理想情况下,您应该使用某种锁定系统。为一个作业设置一个共享标志,并检查该标志是否为第二个作业设置。 cmets 中有两个答案? 【参考方案1】:

只有一条 cron 行,没有。三个,是的:

# Every 15 minutes except for 3:00-3:59
*/15 0-2,4-23 * * * thejob
# 3:15, 3:30, 3:45
15-45/15 3 * * * thejob
# 3:00 dead
0 3 * * * otherjob

【讨论】:

迄今为止,这是我发现的最清晰的例子。虽然在修改richrosa 的响应后可以在两行中使用,但这一行更容易阅读。谢谢你的分享! +1 @bwright,您根据@richrosa 的回答编写的两行将等同于此答案中的第 2 行和第 4 行。此外,IMO,15,30,4515-45/15 更具可读性。【参考方案2】:

我自己制定了解决方案,但我想看看其他人的想法!

我把它放在我想要的脚本的顶部。我希望它也不会在半小时内运行,所以它不会同时运行。

在脚本之上:

if [ $(date +%M) = 00 ] || [ $(date +%M) = 30 ]
then
exit
fi

cron 行:

*/15 * * * * ~/path/to/file

希望有人也使用我的解决方案。

【讨论】:

这很好,但有一个问题。逻辑分布在 2 个文件中:一个是 cronjob,另一个是您的实际命令。有人很容易看不到这两种解决方案,并认为一定存在 cronjob 冲突。【参考方案3】:
 0,15,30,45 0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * your cron job

【讨论】:

这不会在凌晨 3:15、凌晨 3:30、凌晨 3:45 运行,因此这些时间您需要在 crontab 中再添加一行。

以上是关于如何用crontab每5分钟执行一次的主要内容,如果未能解决你的问题,请参考以下文章

crontab怎样每隔5分钟执行一次脚本

php利用crontab执行 5分钟发邮件给用户 (包含每分钟发一次)

如何让crontab 按秒执行

crontab中如何实现每隔多少天执行一次脚本

crontab指定时间执行程序(秒)

crontab 定时器