当前位置: 首页 > news >正文

go 每天定时任务 --chatGPT

问:clearLog(hour,cmds),定时执行shell 命令,hour 为每天的几点,cmds 为linux命令数组字符串(如 1,{"ls","cd"})

gpt:

要编写一个 Go 函数 `clearLog`,该函数可以定时执行 shell 命令,并且接受每天的几点和命令数组字符串作为参数,你可以使用 Go 的 `time` 包来实现定时执行以及 `exec` 包来执行 shell 命令。下面是一个示例:

```go
package main

import (
    "fmt"
    "os"
    "os/exec"
    "strings"
    "time"
)

func clearLog(hour int, cmdsStr string) {
    cmds := strings.Split(cmdsStr, ",")
    if len(cmds) == 0 {
        fmt.Println("命令数组不能为空")
        return
    }

    // 计算下一次执行的时间
    now := time.Now()
    nextRun := time.Date(now.Year(), now.Month(), now.Day(), hour, 0, 0, 0, now.Location())
    if now.After(nextRun) {
        nextRun = nextRun.Add(24 * time.Hour)
    }

    ticker := time.NewTicker(nextRun.Sub(now))

    for {
        select {
        case <-ticker.C:
            for _, cmd := range cmds {
                cmd = strings.TrimSpace(cmd)
                if cmd != "" {
                    fmt.Printf("执行命令: %s\n", cmd)
                    err := executeShellCommand(cmd)
                    if err != nil {
                        fmt.Printf("执行命令出错: %v\n", err)
                    }
                }
            }
            // 重新计算下一次执行的时间
            nextRun = nextRun.Add(24 * time.Hour)
            ticker.Reset(nextRun.Sub(time.Now()))
        }
    }
}

func executeShellCommand(command string) error {
    cmd := exec.Command("bash", "-c", command)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    return cmd.Run()
}

func main() {
    hour := 1 // 每天的几点执行,范围 0 到 23
    cmds := "ls, cd /path/to/directory" // 命令数组字符串,用逗号分隔

    clearLog(hour, cmds)
}
```

在这个示例中,我们首先计算了下一次执行的时间,确保它是将来的时间。然后使用 `time.NewTicker` 创建一个定时器,以在下一次执行的时间触发。在每次触发时,我们执行提供的命令数组中的每个命令。执行命令的函数 `executeShellCommand` 使用 Go 的 `os/exec` 包来运行 shell 命令。

请替换 `hour` 和 `cmds` 变量的值为你的实际需求,以及命令数组字符串中的命令列表。然后,在 `main` 函数中调用 `clearLog` 函数,它将在每天的指定时间执行命令。

http://www.lryc.cn/news/163789.html

相关文章:

  • Lightdb 23.3 plorasql函数支持DML
  • 电容笔值不值得买?开学季比较好用的电容笔
  • Mybatis 框架 ( 五 ) 分页
  • Python模板注入
  • Java常用的设计模式
  • 攻防世界-WEB-Web_php_include
  • angular中多层嵌套结构的表单如何处理回显问题
  • Leetcode646. 最长数对链
  • Windows 下安装NPM
  • 【ARM CoreLink 系列 2 -- CCI-400 控制器简介】
  • LeetCode(力扣)77. 组合Python
  • uniapp h5 微信缓存,解决版本更新还是旧版本
  • Nacos——Distro一致性协议
  • 大模型参数高效微调PEFT的理解和应用
  • 工作游戏时mfc140u.dll丢失的解决方法,哪个方法可快速修复mfc140u.dll问题
  • 选择排序——直接选择排序
  • 【C++基础】观察者模式(“发布-订阅”模式)
  • 从业多年,我总结出软件测试工程师必须掌握的技能,你不可错过!
  • 【nerfStudio】5-nerfStudio导出3D Mesh模型
  • 重要公告|投票委托已经上线,应该如何选择社区代表?
  • 【操作系统】聊聊进程、线程、协程
  • springboot 下 activiti 7会签配置与实现
  • RK3399平台开发系列讲解(内核调试篇)spidev_test工具使用
  • 点云从入门到精通技术详解100篇-自适应点云局部邻域特征的特征提取与配准(续)
  • VBA技术资料MF52:VBA_在Excel中突出显示前 10 个值
  • leetcode做题笔记134. 加油站
  • Allegro166版本如何在颜色管理器中实时显示层面操作指导
  • 纷享销客入选中国信通院《高质量数字化转型产品及服务全景图》
  • C高级 DAY4
  • C高级day4