利用crond实现秒级执行的办法

昨天在设置网站目录的安全时候,为了安全方面的考虑需要将某个目录下的文件3秒清空一次,第一反应是通过cron来解决,可crontab似乎只支持到分,怎么办呢?经过一番努力,终于解决了,分享一下方法,希望帮助到有类似需求的同学。

小编在这里先简单介绍下cron是个什么东西。

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。以下是这个命令的一些参数与说明:

# 配置文件格式说明
# ——分钟 (0 – 59)
# | ——小时 (0 – 23)
# | | ——日 (1 – 31)
# | | | ——月 (1 – 12)
# | | | | ——星期 (0 – 7)(星期日=0或7)
# | | | | |
# * * * * * 被执行的命令

通过配置文件我们也能发现,cron最多只可以设置到分钟。那我们的需求是每秒,那应该如何解决呢?

第一种方法:

当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下:

——–

———–
注意:第一次运行时请不要使用bash kick.sh & 这种后台运行的方式,它会僵死的。
可以把它放到计划任务使其运行,然后将计划任务中的此条目删除即可。最后把这个脚本放到/etc/rc.local让它每次开机都可以被运行。

第二种方法:

和第一种方法类似,只不过感觉比第一种更便捷一些。

————

—————-
然后写入的crontab里每分钟执行一次,如下

——–

—————

第三种方法:

那么如何使用计划任务来直接实现呢?
最后解决方案如下,经验证,脚本运行非常稳定。(脚本作者:findingcc)

———————

#—————————————————————–

这里的

是个完整的命令,假如我们要清空/home/91ri.org/log/ 下方的文件 我们可以这样:

以此类推

那么我还是比较倾向于使用第三种方法的,虽然比较麻烦一点。因为第一种方法和第二种方法并不是严格的间隔3秒执行的,会大于3秒,因为执行脚本scripts.sh也是需要一定时间的,即使已经加了&符号放到了后台执行也会存在一定的误差。如果对于精确度要求不高,推荐使用第二种方法。

[附录]

网络上还有这么一种写法:

意为:每10秒执行一次rm /home/91ri.org/log/* 但不知是否是小编个人的问题还是这个命令本身是错误的,经过在centos下测试后,这个是不可以的。那么有兴趣的同学可以自行测试。

cron的相关使用文章参考《利用cron做linux rsync+ssh 镜像备份

[via@findingcc]

日币奖励:

本文为转载文,但是文章有自己的见地且实用。根据本站积分规则给予日币奖励共1枚。

AD:本站开放投稿及积分(日币),日币可兑换实物奖励,每月top3可获得礼品一份。