golang 手写实现多台机器执行定时任务
多台机器,固定间隔每台分别去执行任务。
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
// 周期60 秒, 获取当前秒钟数,
r := 60
interval := 5
// 机器节点数
node := []string{"node-1", "node-2","node-2"}
localIntranetIP := "node-1"
arr := []int{}
for i:=0; i< r; i=i + int( interval) {
arr = append(arr, i)
}
var index int
var setIndex bool
for key, value := range node {
if value == localIntranetIP {
index = key
setIndex = true
break
}
}
if !setIndex {
fmt.Println("no set index !")
return
}
l := len(node)
m := make([][]int, l)
for key, value := range arr {
s := key % l
m[s] = append(m[s], value)
}
var selfTimer = []int{}
if len(m) >= index + 1 {
selfTimer = m[index]
}
fmt.Println(m)
fmt.Println(selfTimer)
// 初始 200毫秒
timer := time. NewTimer( 200*time.Millisecond)
defer timer.Stop()
var lastTime int
selfTimerLen := len(selfTimer)
for {
select {
case <- timer.C:
timer.Reset( 200*time.Millisecond)
secTime := nowTimeSec()
for key, _ := range selfTimer {
// 数组末尾值
if key == selfTimerLen - 1 && lastTime != selfTimer[key] && secTime > selfTimer[key] {
lastTime = selfTimer[key]
doWork()
} else if key < selfTimerLen - 1 && selfTimer[key] < secTime && secTime <= selfTimer[key + 1 ] && lastTime != selfTimer[key] {
lastTime = selfTimer[key]
doWork()
}
}
}
}
}
func nowTimeSec() int {
secStr := time.Now().Format("05")
secInt, _ := strconv.Atoi(secStr)
return secInt
}
func doWork() {
fmt.Println("do work !", time.Now().Format("2006-01-02 15:04:05"))
}
golang 手写实现多台机器执行定时任务的更多相关文章
- linux利用ssh远程执行多台机器执行同样的命令
这篇文章主要介绍了ssh远程执行命令方法和Shell脚本实例,本文讲解了ssh执行远程操作方法和远程执行命令shell脚本示例,需要的朋友可以参考下 ssh执行远程操作命令格式代码如下: ssh -t ...
- window与MAC,多台机器ssh免密码登录同一台机器执行某个脚本,
参考:https://zhidao.baidu.com/question/586579720.html A B C三台机器上以当前用户运行如下命令生成本主机的公钥和私钥文件: 1 ssh-keygen ...
- shell 脚本同时对远程多台机器执行命令
脚本1:需要机器之间免密 ssh-copy-id [-i [identity_file]] [user@]machine #!/bin/bash # ------------------------- ...
- 自己手写WEB程序框架并执行
1.新建目录,起名MyWeb 2.目录下,新建两个目录 WEB-INF, META-INF,,还能够新建一些jsp,html文件 ,如 index.html 3在WEB-INF中必须存在一个文件WEB ...
- sql server 作业导出放到另外一台机器执行时报错的解决方法
SQL Server2008脚本创建作业失败,提示: 引用内容消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行不能将值 NULL 插入列 'owner_sid',表 'm ...
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- 集群中配置多台机器之间 SSH 免密码登录
集群中配置多台机器之间 SSH 免密码登录 问题描述 由于现在项目大多数由传统的单台机器部署,慢慢转变成多机器的集群化部署. 但是,这就涉及到机器间的 SSH 免密码互通问题. 当集群机器比较多的时候 ...
- 手写DAO框架(四)-SQL执行
-------前篇:手写DAO框架(三)-数据库连接--------- 前言 通过上一篇写的方法,可以灵活的获取.释放数据库连接,拿到连接之后,我们就可以执行sql了!所以,本篇介绍的就是SQL执行器 ...
- 带小伙伴手写 golang context
前言 - context 源码 可以先了解官方 context.go 轮廓. 这里捎带保存一份当前 context 版本备份. // Copyright 2014 The Go Authors. Al ...
- ssh无密码登录多台机器,并让所有远程机执行相同命令
问题集锦 其实标题的内容就是很常见的集群操作,当有一个脚本或者一个命令需要很多个机器同时(或者说接近同时)执行时,就涉及到几个问题: 怎么通知每个主机? 每个主机收到通知后,怎么让主机执行命令? 怎么 ...
随机推荐
- linux环境编程(1): 实现一个单元测试框架
写在前面 在开发的过程中,大多数人都需要对代码进行测试.目前对于c/c++项目,可以采用google的gtest框架,除此之外在github上搜索之后可以发现很多其他类似功能的项目.但把别人的轮子直接 ...
- 算法竞赛向 C++ Standard Library 使用速查
因网络上 STL 教程大多零散且缺乏严谨性,本文对算法竞赛所需 C++ Standard Library 做了一个较为全面的总结. 全文主要参考以下文档: Containers library - c ...
- 【题解】[LNOI2022] 盒
题目分析: 我们可以对每一条边单独计算贡献,这样会发现贡献很好算: \[ans = \sum_{i=0}^{n-1} w_i \sum_{j=0}^S |j - s_i| \binom{i+j-1}{ ...
- 前端基础知识-css(一)个人学习记录
待补充 flex及其属性 https://blog.csdn.net/weixin_44706267/article/details/121291934 css3新特性 sass和less https ...
- Idea 2022 springboot 3.0 druid: testWhileIdle is true, validationQuery not set
druid启动错误解决方法: Druid连接池 :严重: testWhileIdle is true, validationQuery not set 增中配置 在 application.yml 增 ...
- mybatis学习日记
1.什么是框架 框架是软件开发中的一套解决方案,不同的框架解决不同的问题 2.三层架构 表现层:展示数据 业务层:处理业务需求 持久层:与数据库交互 3.持久层解决技术 JDBC技术(JDBC是一种规 ...
- UBUNTU18.04安装使用ORB-SLAM2
1.下载: git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 2.依赖项: sudo apt install autotools ...
- PPMM
代码 #include<cstdio> using namespace std; const int N = 1000000 , INF = 2e9; int n , m , x , he ...
- JavaScript 如何验证 URL
前言 当开发者需要为不同目的以不同形式处理URL时,比如说浏览器历史导航,锚点目标,查询参数等等,我们经常会借助于JavaScript.然而,它的频繁使用促使攻击者利用其漏洞.这种被利用的风险是我们必 ...
- 利用CRT配合VBS脚本实现自动化巡检
利用CRT配合VBS脚本实现自动化巡检 以山石防火墙巡检为例 目录 利用CRT配合VBS脚本实现自动化巡检 1 设备列表文件:list.txt 2 VBS脚本: 2022山石巡检.vbs 3 使用方式 ...