• 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` 函数,它将在每天的指定时间执行命令。

  • 相关阅读:
    v82.01 鸿蒙内核源码分析 (协处理器篇) | CPU 的好帮手 | 百篇博客分析 OpenHarmony 源码
    从工程师到系统架构设计师【成长之路】
    从libc-2.27.so[7fd68b298000+1e7000]崩溃回溯程序段错误segfault
    模块 Python3
    Bean 的作用域和生命周期
    Java替换 html 中隐藏的空格字符
    C++,STL,,vector容器
    赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码.
    QT开发之串口通信(四)
    您的连接不是私密连接 攻击者可能会试图从 github.com 窃取您的信息(例如:密码、通讯内容或信用卡信息)
  • 原文地址:https://blog.csdn.net/glc22/article/details/132816341