go中使用cmd与cron

Python013

go中使用cmd与cron,第1张

/bin/bash -c "ls -l"

cmd->golang->pipe

pipe()创建2个文件描述符,fd[0]可读,fd[1]可写

fork() 创建子进程 fd[1]被继承到子进程

dup2() 重定向子进程 stdout/stderr到fd[1]

exec() 在当前进程内,加载并执行二进制程序

模拟一下cmd调用

模拟调用cmd时,杀死bash进程

go开源Cronexpr库

Parse() 解析与校验Cron表达式

Next() 根据当前时间,计算下一次调度时间

模拟一下cron调用

执行结果

模拟多个cron调用

执行结果

import (

   "bytes"

   "fmt"

   "os/exec"

)

func exec_shell() (string, error){

   //函数返回一个*Cmd,用于使用给出的参数执行name指定的程序

   cmd := exec.Command("shutdown", "-h","now")

   //读取io.Writer类型的cmd.Stdout,再通过bytes.Buffer(缓冲byte类型的缓冲器)将byte类型转化为string类型(out.String():这是bytes类型提供的接口)

   var out bytes.Buffer

   cmd.Stdout = &out

   //Run执行c包含的命令,并阻塞直到完成。  这里stdout被取出,cmd.Wait()无法正确获取stdin,stdout,stderr,则阻塞在那了

   err := cmd.Run()

   return out.String(), err

}

func main(){

   if result,err:=exec_shell()err!=nil{

      fmt.Println("error:",err)

   }else{

      fmt.Println("exec succ ", result)

   }

}