Crontab 的使用

Crontab 的使用crontab用于设置定时任务,通过cat/etc/crontab可查看crontab示例:$cat/etc/crontabSHELL=/bin/bashPATH=/sbin:/

大家好,又见面了,我是你们的朋友全栈君。

crontab 用于设置定时任务,通过 cat /etc/crontab 可查看 crontab 示例:

$ cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

根据输出可知,该命令分三部分,

  • * 设置的循环周期
  • user-name 指定运行该任务的身份
  • 最后一部分是需要运行的脚本路径或具体的命令

身份

期中以什么身份运行脚本,可通过 crontab 的 -u 参数指定,

$ sudo crontab -u user001 -e

上述命令将以 user001 的身份创建并运行 job。

也可以直接编辑 /etc/crontab 文件,该文件中可指定 username:

1 1 * * * user001 user001 /data/home/user001/test.sh

job 的管理

  • crontab -e: 编辑或创建 job,配合 -u 可操作指定用户的 job
  • crontab -l: 列出 job,配合 -u 参数可查看指定用户的 job
  • crontab -r: 删除 job 文件,慎用,没有确认过程直接就删了
  • crontab -i: 同 -r,但删除前会先确认

循环周期

5 个 * 的位置分别代表了不同时间单位,由左至右依次为,

  • 分,取值范围 0 ~ 59
  • 时,0 ~23
  • 天,1 ~ 31
  • 月,1 ~ 12,部分实现支持使用名称 jan,feb,mar,…
  • 星期,0 ~ 6,其中星期天为 0,部分实际支持使用名称,sun, mon, tue…

所以如下格式:

30 5 11 12 * echo "hello"

表示 “12 月 11 日的 5:30” 打印 “hello”。

特殊符号

*

期中,* 代表该位置时间单位下所有可取的值,比如第一个位置代表分,指定为 * 时就是每分钟都执行。

所以五个星 * * * * * 表示每分钟。

,

指定多个值时用于逗号分隔,

0,15,30 * * * *

表示当时间为 0,15 或 30 分钟的时候执行。

-

连字符用于指定范围,

0-15,30 * * * *

表示 0~15 之间的每分钟,以及第 30 分钟的时候执行。

/

除号用于设置重复的间隔,

*/15 * * * *

表示每个一刻钟的时候,即 0,15,30,45 这些时刻。

它与 15 * * * * 的区分是后者表示一个值,即 15min 的时候,13:15, 12:15 这些。

非标准的字符串

还有一些方便的预设关键字,但这些都是非标准的,不同机器支持情况不同。

Entry Description Equivalent to
@yearly (or @annually) 每年一月午夜 0 0 1 1 *
@monthly 每月首日午夜 0 0 1 * *
@weekly 每周天午夜 0 0 * * 0
@daily (or @midnight) 每天午夜 0 0 * * *
@hourly 每小时 0 * * * *
@reboot 重启时 N/A

示例:重启后启动 redis

@reboot /usr/local/bin/redis-server /path/to/redis.conf

一些示例

每分钟打印日期到指定文件,

  • crontab -e 打开 job 编辑界面
  • 输入 */1 * * * * date >> /data/home/wayongliu/foo.txt 然后 :wq 保存退出
  • tail -f /data/home/wayongliu/foo.txt` 查看结果

实现每隔多少秒执行

因为能设置的最小时间单位为分,需要设置每隔多少秒执行时,就需要变通来实现。

借助 sleep,可不用 crontab, 比如每 5 秒:

#!/bin/bash
while true
do
 /home/user/myscript.sh
 sleep 5
done

也可以 sleep 与 crontab 结合来用,考虑到每 5 秒,一分钟内即执行 12 次,可以设置 12 个 job:

* * * * * /home/user/myscript.sh
* * * * * sleep 5; /home/user/myscript.sh
* * * * * sleep 10; /home/user/myscript.sh
* * * * * sleep 15; /home/user/myscript.sh
* * * * * sleep 20; /home/user/myscript.sh
* * * * * sleep 25; /home/user/myscript.sh
* * * * * sleep 30; /home/user/myscript.sh
* * * * * sleep 35; /home/user/myscript.sh
* * * * * sleep 40; /home/user/myscript.sh
* * * * * sleep 45; /home/user/myscript.sh
* * * * * sleep 50; /home/user/myscript.sh
* * * * * sleep 55; /home/user/myscript.sh

其中第一个任务会在每分钟开始时执行,
第二个也是每分钟开始执行,不过会 sleep 5s,所以实际是每分钟每 5s 的时候执行,
后面的任务类似,从而达到了需要的效果。

相关资源

The text was updated successfully, but these errors were encountered:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155359.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java解析url的链接和参数_java根据url下载图片

    java解析url的链接和参数_java根据url下载图片方法一Blob和FileReader对象实现原理:使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType=“blob”],使用FileReader对象接收blob。getBase64(“https://fastmarket.oss-cn-shenzhen.aliyuncs.com/oss/static/other/1/images/baseMap_index.jpg”)//链接是你的网络图片functiongetBase64(imgUrl){

    2022年9月2日
  • PHP审计之PHP反序列化漏洞

    PHP审计之PHP反序列化漏洞前言一直不懂,PHP反序列化感觉上比Java的反序列化难上不少。但归根结底还是serialize和unserialize中的一些问题。在此不做多的介绍。魔术方法

    2021年12月13日
  • word2vec原理与Gensim使用[通俗易懂]

    word2vec原理与Gensim使用[通俗易懂]word2vec原理1NeuralNetworkLanguageModel2CBOW2.1HierarchicalSoftmax2.2NegativeSampling3Skip-gram3.1HierarchicalSoftmax3.2NegativeSampling4负采样算法5.word2vec实战1NeuralNetworkLanguageModel…

    2022年5月16日
  • 树莓派4B基础教程

    树莓派4B基础教程树莓派4B基础教程准备:硬件:树莓派4B,SD一张软件:SDCardFormatter(SD卡格式化工具),Win32DiskImager(烧录系统工具)这是一个纯新手教程,由于更新换代,有些东西3b的教程能用4b用不了,由于版本原因,有些东西直接出错,所以干脆花时间自己整理了一下.作者自述:对!东西全是百度来的,劳资只是一个搞Java开发的,也没有见过这些小东西可能比普通…

    2022年6月10日
  • 一比一还原axios源码(一)—— 发起第一个请求

    上一篇文章,我们简单介绍了XMLHttpRequest及其他可以发起AJAX请求的API,那部分大家有兴趣可以自己去扩展学习。另外,简单介绍了怎么去读以及我会怎么写这个系列的文章,那么下面就开始真正的

    2022年3月25日
  • a标签下划线的距离问题[通俗易懂]

    a标签下划线的距离问题[通俗易懂]需求a标签下划线距离太接近了,需要调整一下页面代码<pclass=”text_align_r”><spanclass=”ordersave_info”><s:textname=”order_submited_tip”/></span><ahref=”/to_be_signed.html”><s:textname=”order_submited_a_tip”/></a></p&

    2022年6月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号