iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golangcroncli定时器命令详解
  • 128
分享到

golangcroncli定时器命令详解

2024-04-02 19:04:59 128人浏览 独家记忆
摘要

目录定时器命令格式定时执行命令单个命令多个命令windows系统下的使用特殊情况处理定时命令执行出现panic定时命令执行时间过长其他定时器是执行任务时的常用功能,配置系统的定时任务

定时器是执行任务时的常用功能,配置系统的定时任务太麻烦,所以就想用golang简单实现一个定时器命令。

通过这个简单的命令,可以定时或者重复的执行其他命令。
工具基于:https://GitHub.com/robfig/cron/ 来实现的。
小工具开源在: Https://gitee.com/wangyubin/croncli

定时器命令格式

定时器的参数包括:

$ croncli -h
定时器命令

Usage:
  croncli [flags]

Flags:
  -c, --cron string     支持标准的crontab 表达式, ex. * * * * * *
                        各个 * 号的含义:
                        - 秒
                        - 分钟
                        - 小时
                        - 每月的第几天
                        - 月
                        - 每周的第几天
  -h, --help            help for croncli
  -m, --mode string     任务执行模式:
                        - delay(如果上一次任务还未执行完成(耗时太长),则等待上一次任务完成之后再执行)
                        - skip(如果上一次任务还未完成,则跳过此次执行)
      --norecover       是否捕获任务的 panic 错误, 默认 false
      --os string       系统类型,nx=linux win=windows,默认nx (default "nx")
  -r, --repeat string   重复规则, ex. 1s(每秒重复),1m(每分钟重复),1h(每小时重复)

其中控制执行时机的参数有2个:

  • -c, --corn 参数内容是crontab 表达式,之后的命令按照这个crontab
  • -r, --repeat 这个参数相当于cron参数的简化版,用来设置命令的重复执行

这2个参数同时使用的话,同时生效。也就是说,命令既重复执行,也按照crontab设置的规则执行。

另外,-m, --mode 参数只能是 delay 和 skip,含义参见上面的help说明。

定时执行命令

单个命令

对于单个命令,执行方式如下:(通过 Ctrl+C 结束程序运行)

$ croncli --repeat 2s date
- Press Ctrl+C to terminate
OUTPUT>>>>>
Wed 16 Mar 2022 10:45:08 AM CST

OUTPUT>>>>>
Wed 16 Mar 2022 10:45:10 AM CST

OUTPUT>>>>>
Wed 16 Mar 2022 10:45:12 AM CST

^Cinterrupt

上面的命令用 --repeat 参数,等价于下面的 --cron 参数:

$ croncli --cron "*/2 * * * * *" date
- Press Ctrl+C to terminate
OUTPUT>>>>>
Wed 16 Mar 2022 10:50:42 AM CST

OUTPUT>>>>>
Wed 16 Mar 2022 10:50:44 AM CST

OUTPUT>>>>>
Wed 16 Mar 2022 10:50:46 AM CST

^Cinterrupt

多个命令

执行多个命令时,需要注意的是,多个命令要用单引号或者双引号括起来。

$ croncli --cron "*/2 * * * * *" "date; uname -r"
- Press Ctrl+C to terminate
OUTPUT>>>>>
Wed 16 Mar 2022 10:54:38 AM CST
5.10.0-10-amd64

Wed 16 Mar 2022 10:54:40 AM CST
Wed 16 Mar 2022 10:54:42 AM CST
^Cinterrupt

这里的** "date; uname -r"** 要用 双引号括起来,如果没有这个双引号,就变成2个命令,
一个是 croncli --cron "*/2 * * * * *" date,一个是 uname -r。

windows系统下的使用

首先编译一个windows下的可执行文件。

GoOS=windows GOARCH=amd64 go build

然后执行:

D:\share>croncli.exe -r 2s --os win echo %date%
- Press Ctrl+C to terminate
OUTPUT>>>>>
2022/03/17

OUTPUT>>>>>
2022/03/17

OUTPUT>>>>>
2022/03/17

OUTPUT>>>>>
2022/03/17

interrupt

特殊情况处理

定时命令执行出现panic

执行的命令中出现崩溃错误是,如果不处理,会导致整个定时器停止,比如:

$ croncli -r 2s --norecover cat file-not-existed
- Press Ctrl+C to terminate
panic: exit status 126

goroutine 34 [running]:
main.CmdJob.Run({{0x592e82, 0x2}, {0xc0000b40f0, 0x2, 0x5}})
        /home/wangyubin/projects/golang/croncli/cmdjob.go:22 +0xb3
github.com/robfig/cron/v3.(*Cron).startJob.func1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:307 +0x6a
created by github.com/robfig/cron/v3.(*Cron).startJob
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:305 +0xb2

默认不带 --norecover 参数时,命令崩溃这不会导致定时器的中止,比如:

$ croncli -r 2s  cat file-not-existed
- Press Ctrl+C to terminate
cron: 2022/03/17 00:52:40 panic, error=exit status 126, stack=...
goroutine 22 [running]:
github.com/robfig/cron/v3.Recover.func1.1.1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/chain.go:45 +0x85
panic({0x587da0, 0xc000024040})
        /usr/local/go/src/runtime/panic.go:1038 +0x215
main.CmdJob.Run({{0x592e82, 0x2}, {0xc0000c2040, 0x2, 0x4}})
        /home/wangyubin/projects/golang/croncli/cmdjob.go:22 +0xb3
github.com/robfig/cron/v3.Recover.func1.1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/chain.go:53 +0x73
github.com/robfig/cron/v3.FuncJob.Run(0x0)
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:131 +0x1a
github.com/robfig/cron/v3.(*Cron).startJob.func1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:307 +0x6a
created by github.com/robfig/cron/v3.(*Cron).startJob
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:305 +0xb2
cron: 2022/03/17 00:52:42 panic, error=exit status 126, stack=...
goroutine 5 [running]:
github.com/robfig/cron/v3.Recover.func1.1.1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/chain.go:45 +0x85
panic({0x587da0, 0xc0000241a0})
        /usr/local/go/src/runtime/panic.go:1038 +0x215
main.CmdJob.Run({{0x592e82, 0x2}, {0xc0000c2040, 0x2, 0x4}})
        /home/wangyubin/projects/golang/croncli/cmdjob.go:22 +0xb3
github.com/robfig/cron/v3.Recover.func1.1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/chain.go:53 +0x73
github.com/robfig/cron/v3.FuncJob.Run(0x0)
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:131 +0x1a
github.com/robfig/cron/v3.(*Cron).startJob.func1()
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:307 +0x6a
created by github.com/robfig/cron/v3.(*Cron).startJob
        /home/wangyubin/projects/gopath/pkg/mod/github.com/robfig/cron/v3@v3.0.0/cron.go:305 +0xb2
^Cinterrupt

虽然命令因为错误崩溃,定时器仍然会定时重新执行命令,直到主动使用 Ctrl+C 来退出。

定时命令执行时间过长

还有一种异常的情况时,如果命令执行时间过长,也就是这次的命令还没执行完,却已经到了下次命令的执行的时间。

这时,我们可以通过 --mode 参数控制下次命令的执行。
一种是让下次命令等待这次命令执行完再执行(--mode delay),这样就会导致后续所有的命令都延迟执行,比如:

$ croncli -r 2s --mode delay "date; sleep 3"
- Press Ctrl+C to terminate
OUTPUT>>>>>
Thu 17 Mar 2022 01:10:04 AM CST

Thu 17 Mar 2022 01:10:07 AM CST
Thu 17 Mar 2022 01:10:10 AM CST
^Cinterrupt

所有的命令都等上一个执行完(需要3秒)才执行,所以命令执行间隔是3秒。

还有一种情况是忽略这次的命令执行(--mode skip),比如:

$ croncli -r 2s --mode skip "date; sleep 3"
- Press Ctrl+C to terminate
OUTPUT>>>>>
Thu 17 Mar 2022 01:11:56 AM CST

Thu 17 Mar 2022 01:12:00 AM CST
Thu 17 Mar 2022 01:12:04 AM CST
^Cinterrupt

由于每次命令执行需要3秒,所以这个命令的下一个命令(间隔2s)都忽略执行了,只有下下个命令(间隔4s)才能轮到执行。

其他

这只是初步实现的定时器,后续可以继续改进,比如:

支持脚本的定时执行能够限制执行的次数

到此这篇关于golang croncli 定时器命令的文章就介绍到这了,更多相关golang croncli 定时器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: golangcroncli定时器命令详解

本文链接: https://www.lsjlt.com/news/142937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golangcroncli定时器命令详解
    目录定时器命令格式定时执行命令单个命令多个命令windows系统下的使用特殊情况处理定时命令执行出现panic定时命令执行时间过长其他定时器是执行任务时的常用功能,配置系统的定时任务...
    99+
    2024-04-02
  • win10怎么定时关机?Win10系统定时关机命令使用方法详解
    对于电脑用户来说,定时关机有时候经常会用到,比如夜间下载东西或者下载一些大文件,而又没有时间一直守着电脑,这时候设置电脑定时关机就很实用了。随着Win10正式版即将到来,今后很多用户都将用上最新的Win10系统,那么wi...
    99+
    2023-06-17
    win10 定时关机 关机命令 关机 系统 使用 命令 Win10
  • 云服务器定时重启命令
    要设置云服务器定时重启,请按照以下步骤操作: 登录小鸟云管理后台,进入云服务器管理界面。 在左侧菜单中选择“系统管理”。 在系统管理界面中,选择“定时重启”功能。 在定时重启功能页面中,输入重启命令的起始时间和结束时间,以及重启服务器的...
    99+
    2023-10-27
    重启 命令 服务器
  • 定时关机命令win7系统详细步骤
    有时候,下载一个东西,但是又要关闭电脑睡觉了,但是又想等东东下载好了,才去睡觉,想想如果能定时关机就好了,那么下面就让小编和大家分享win7电脑设置定时关机的方法吧。1、点击桌面左下角的开始菜单图标,然后在弹出的页面中点击 运行 选项或者是...
    99+
    2023-07-15
  • linux定时运行的命令
    本篇内容主要讲解“linux定时运行的命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux定时运行的命令”吧!linux定时运行命令命令简介每个用户都有各自不同的计划任务列表,用各自的帐...
    99+
    2023-06-13
  • Linux命令详解(15)lsof命令
    lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具。它是 List Open Files的缩写。 使用 lsof,你可以获取任何被打开文件的各种信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身...
    99+
    2023-09-02
    服务器 运维 lsof
  • Linux命令详解(14)useradd命令
    useradd用于添加一个linux账户。adduser跟本命令等价。 useradd同样属于不复杂但很重要的命令。 --help获得帮助信息。 -b选项,制定家目录的根  -c选项,给新用户添加说明信息 -d选项,给新用户设置家目录 ...
    99+
    2023-08-31
    linux 运维 服务器
  • win7系统定时关机命令的详细介绍
    Win7怎么让电脑定时关机?想必大家一定有遇到过这样的烦恼吧,电脑文件下载到一半或传输到一半的时候,而你有事需外出,关机吧太可惜了,不关机吧又浪费电,还会影响电脑的使用寿命,那么该如何是好呢?这时候选择电脑定时关机是最好的解决办法。那么,W...
    99+
    2023-07-13
  • netstat命令详解
    netstat命令详情 一、前言二、netstat查看端口命令三、显示每个协议的统计信息四、显示核心路由信息五、netstat的其他参数 一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习nets...
    99+
    2023-08-30
    网络 tcp/ip 服务器 netstat
  • nohup命令详解
    nohup命令详解 一、背景说明: 启动服务的时候,如果使用如下命令,则会在start.sh脚本所在的目录下,产生一个名为 nohup.out 的输出文件 nohup ./startup.sh & 可以看到下面这个例子,一开始当前...
    99+
    2023-09-02
    java shell nohup Powered by 金山文档
  • iscsiadm命令详解
    iscsiadm是一个用于管理iSCSI设备的命令行工具。它可以用于发现iSCSI目标、登录iSCSI设备、配置iSCSI设备和管理...
    99+
    2023-09-28
    iscsiadm
  • RMAN命令详解
    这篇文章主要讲解了“RMAN命令详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RMAN命令详解”吧! 1 列出对应物  R...
    99+
    2024-04-02
  • ipconfig命令详解
    ipconfig命令是在Windows操作系统中用于显示和修改网络配置信息的命令行工具。通过ipconfig命令,可以获取计算机的I...
    99+
    2023-09-20
    ipconfig
  • iostat 命令详解
    iostat 命令详解 语法参数详解返回值详解avg-cpu 段Device 段-x 参数的扩展值 性能分析I/O瓶颈内存不足CPU资源不足IOPS 计算吞吐量 计算 示例参考文章 ...
    99+
    2023-09-02
    服务器 运维 linux
  • 详解SFTP命令
    目录SFTP命令一、介绍二、使用SFTP进行连接三、连接参数详解四、目录管理五、传输文件5.1 从远程服务器拉取文件5.2 从本地上传文件到服务器六、最佳实践SFTP命令 一、介绍 ...
    99+
    2024-04-02
  • tar命令详解
    文章目录 tar1、tar命令的打包操作2、tar命令的解包操作3、tar命令的建立压缩包操作 tar Tar(tape archive)是一种归档文件格式,它通常用于将多个文件打包成一个单一的文件。该文件通常以.tar扩展...
    99+
    2023-08-20
    linux 运维 服务器
  • lspci 命令详解及常用命令
    lspci命令用于显示计算机的PCI总线信息,包括PCI设备的厂商、设备ID等。常用的lspci命令参数如下:- -v:显示详细的信...
    99+
    2023-09-09
    lspci
  • SSH命令详解
    SSH命令详解 SSH(Secure Shell)是一种用于安全登录远程计算机的网络协议。通过 SSH,可以在不受干扰的情况下,传输服务器操作系统和网络管理中的各种命令。它可以通过加密来保护传输的数据...
    99+
    2023-09-08
    ssh 服务器 运维
  • awk命令详解
    目录 一、awk概述 1.工作原理 2.语法格式  3.awk常用的内建变量 二、按行输出文本 1.输出所有内容 2.输出指定行号的内容 3.输出奇偶行内容 4.输出匹配行的行内容 二、按字段输出文本 1.输出指定字段 2.输出结果指定分隔...
    99+
    2023-10-21
    linux 运维 服务器
  • tar 命令详解
    tar 命令详解 压缩文件命令:tar -czvfh xxxx.tar.gz xxxx 还原文件命令:tar -xzvfh xxxx.tar.gz xxxx 指令说明-c创建新的文件-f指定文件名-h不建立符号连接,直接复制该连接所指向的原...
    99+
    2023-12-22
    linux 服务器 ubuntu
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作