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

相关推荐
Yana.nice8 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
2601_9605679610 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
吳所畏惧11 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈11 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HiDev_12 小时前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zhang~Ling12 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind12 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的阿森13 小时前
鸿蒙三方库 | harmony-utils之PreferencesUtil首选项数据监听详解
服务器·华为·harmonyos·鸿蒙·huawei
爱写代码的森13 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei