ir crontab tarea cronometrada

En Linux, puede editar las tareas programadas a través de crontab -e o vi /etc/crontab, la diferencia es que solo el usuario root puede usar este último, y también puede especificar el entorno de shell, no se recomienda modificarlo. Se recomienda hacer una copia de seguridad antes de la modificación. La primera puede ser utilizada por cualquier usuario. Después de la modificación, no hay necesidad de modificar y reiniciar automáticamente.

1 tarea de temporización crontab de linux

# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

2 golang crontab tarea cronometrada

2.1 Instalación y uso

2.1.1 Instalación

go get github.com/robfig/cron/[email protected]

2.1.2 Importar

import "github.com/robfig/cron/v3"

2.2 Reglas de tiempo

2.2.1 Reglas de tiempo estándar

# .------------------second (0 - 59)
# | .---------------- minute (0 - 59)
# | | .------------- hour (0 - 23)
# | | | .---------- day of month (1 - 31)
# | | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun
# | | | | | |
# * * * * * * user-name command to be executed

Nota: La granularidad mínima admitida por cron es minutos de forma predeterminada. Para admitir el segundo nivel, debe habilitarse pasando cron.WithSeconds(). La expresión de tiempo de cron después de habilitar es diferente de la expresión de tiempo de crontab en Linux. 

package crontab
import "github.com/robfig/cron"

func CronExec() {
    spec := "*/2 * * * * ?" //每2s执行一次
    spec := "0 5 10 * * ?" //每天早上10:05:00执行一次
    spec := "* * 10 * * ?" //每天10点开始的一个小时一直在执行
    spec := "* 1-59/10 * * * ?" //每天1分到59分每10分钟执行一次

    c := cron.New()
    id,err := c.AddFunc(spec, func()) {
        crontab()
    }
    if err != nil {
        fmt.Sprintf("crontab exec error: %v with id: %v", err, id)
    }
    c.Start()
    return c

func crontab() {
    fmt.Sprint("crontab exec...")
}
package main 
import crontab

func main() {
    //执行任务代码
    xxx  
   
    go func() {
        CronExec()
    }()
}

El siguiente ejemplo de tabla se escribe cuando el soporte de segundo nivel está habilitado:

expresión ilustrar
* * * * * * Ejecutado cada segundo
0 */1 * * * * Ejecutar cada minuto
0 0 */1 * * * correr cada hora
0 0 0 */1 * * 00:00Ejecutado una vez al día
0 30 23 */1 * * 23:30Ejecutado una vez al día
0 0 0 1 */1 * Ejecutado el primer día de cada mes.
0 30 21 * * 1 21:30Ejecutar todos los lunes

 

2.2.2 Reglas de tiempo predefinidas

Para facilitar su uso, cron predefine algunas reglas de tiempo:

  • @anual: también se puede escribir como @anualmente, lo que significa las 0 en punto del primer día de cada año. Equivale a 0 0 1 1 *;
  • @monthly: Indica las 0 en punto del primer día de cada mes. Equivalente a 0 0 1 * *;
  • @weekly: Indica las 0 del primer día de la semana, tenga en cuenta que el primer día es el domingo, es decir, las 0 del final del sábado y el comienzo del domingo. Equivale a 0 0 * * 0;
  • @diario: También se puede escribir como @medianoche, lo que significa 0:00 todos los días. Equivalente a 0 0 * * *;
  • @hourly: Indica el inicio de cada hora. Equivalente a 0 * * * *.
func main() {
  c := cron.New()

  c.AddFunc("@hourly", func() {
    fmt.Println("Every hour")
  })

  c.AddFunc("@daily", func() {
    fmt.Println("Every day on midnight")
  })

  c.AddFunc("@weekly", func() {
    fmt.Println("Every week")
  })

  c.Start()

  for {
    time.Sleep(time.Second)
  }
}

Nota: Usando una tarea de temporización cron.New() de esta manera, cada método ejecutado se ejecuta secuencialmente, es decir, no comienza a ejecutarse al mismo tiempo.

2.2.3 Intervalo de tiempo fijo

cron admite intervalos de tiempo fijos, el formato es:

@every <duration>

El significado es activar cada duración. <duration> llamará a la función time.ParseDuration() para analizar, por lo que cualquier formato compatible con ParseDuration es aceptable. Por ejemplo 1h30m10s.

2.2.4 Zona horaria

De forma predeterminada, todas las horas se basan en la zona horaria actual. Por supuesto, también podemos especificar la zona horaria, hay dos formas:

Agregue un CRON_TZ= + zona horaria específica delante de la cadena de tiempo. El formato de la zona horaria específica se describe en detalle en el artículo anterior. La zona horaria de Tokio es Asia/Tokio, y la zona horaria de Nueva York es América/Nueva_York;
al crear un objeto cron, agregue una opción de zona horaria cron.WithLocation(ubicación), donde ubicación es el objeto de zona horaria cargado por time.LoadLocation (zone), y zone es el formato de zona horaria específico. O llame al método SetLocation() del objeto cron creado para establecer la zona horaria.
 

func main() {
  nyc, _ := time.LoadLocation("America/New_York")
  c := cron.New(cron.WithLocation(nyc))
  c.AddFunc("0 6 * * ?", func() {
    fmt.Println("Every 6 o'clock at New York")
  })

  c.AddFunc("CRON_TZ=Asia/Tokyo 0 6 * * ?", func() {
    fmt.Println("Every 6 o'clock at Tokyo")
  })

  c.Start()

  for {
    time.Sleep(time.Second)
  }
}

2.3 Métodos comunes

2.3.1 Nuevo()

creará una nueva instancia de trabajo cron (en blanco) basada en la hora local

// 创建一个默认的cron对象
cron.New()

// 自定义解析器
cron.New(cron.WithSeconds())

// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
    cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))

2.3.2 AñadirTrabajo()

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)
 
// Job是一个接口,有一个Run方法
type Job interface {
    Run()
}

2.3.3 AgregarFunción()

Se agregará una función de devolución de llamada a la instancia de tarea programada y la función de devolución de llamada se ejecutará de acuerdo con el programa especificado.

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个传入一个函数,就是要执行的任务

// 会返回一个Id和error

// 会把传入的cmd func转成FuncJob。FuncJob实现了Job接口

func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {

    return c.AddJob(spec, FuncJob(cmd))

}

2.3.4 Inicio()

Llame al método de inicio para iniciar la tarea.

Supongo que te gusta

Origin blog.csdn.net/ygq13572549874/article/details/131443719
Recomendado
Clasificación