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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gridview样式模板_react-grid-layout

    gridview样式模板_react-grid-layoutGridView中有些td、th的样式不好设置或是里面的控件,可能用如下方式设置table.GridView td,th{    PADDING-RIGHT:1px;   PADDING-LEFT:3px;   PADDING-BOTTOM:1px;   PADDING-TOP:1px;   FONT-FAMILY:Arial,宋体,Verdan…

    2022年9月24日
    2
  • Unity Shader入门精要(3D画入门)

    Shader的种类UnityShader是将传统的硬件Shader(由Cg/HLSL编写)嵌入到独有的描述性结构中而形成的一种代码生成框架,最终会自动生成各硬件平台自己的Shader,从而实现跨平台。UnityShader分为表面着色器(SurfaceShader)和顶点片段着色器(VertexAndFragmentShader)。表面着色器(SurfaceShader

    2022年4月11日
    146
  • Docker安装RabbitMQ并安装延时队列插件

    Docker安装RabbitMQ并安装延时队列插件一、RabbitMQ简介RabbitMQ是由erlang语言开发,基于AMQP(AdvancedMessageQueue高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。二、docker安装RabbitMQ1、搜索镜像dockersearchrabbitmq2、拉取并运行容器dockerrun-dit–namerabbitmq-eRABBITMQ_DEFAULT_USER=guest-eR

    2022年5月10日
    100
  • 数组splice_数组concat方法

    数组splice_数组concat方法有三个方法经常会混淆,但是了解它后你会发现很好区分splice方法是数组特有的方法spite方法是字符串特有的方法slice方法是字符串和数组共同都有的方法这里介绍下数组的常用方法数组的splice方法splice()函数用于从当前数组中移除一部分连续的元素。如有必要,还可以在所移除元素的位置上插入一个或多个新的元素。该函数以数组形式返回从当前数组中被移除的元素。该…

    2022年9月25日
    4
  • [linux] sshd_config 打开PermitRootLogin

    [linux] sshd_config 打开PermitRootLogin允许root用户远程登录vim/etc/ssh/sshd_configPermitRootLoginyes允许无密码登录1)将PermitEmptyPasswordsyes前面的#号去掉2)将PermitEmptyPasswords参数值修改为yesservicesshdrestart

    2022年5月1日
    106
  • 如何安装Java?

    如何安装Java?在本文中,我们将研究如何安装Java,在Windows操作系统中安装Java,如何检查已安装的版本以及设置环境变量。因此,让我们开始吧。如何安装Java?Java支持许多平台,例如Windows,Linux,Solaris等。这些平台具有自己的安装方法。在本教程中,我们将介绍32位和64位OS的安装过程Windows操作系统。Windows操作系统中的Java安装在Windows操作系统中,32位和64位Windows操作系统都具有类似的Java安装方式。主要区别在于它们的安装软件包。如何检查主机

    2022年7月9日
    24

发表回复

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

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