GNU/Linux >> Tutoriales Linux >  >> Linux

Un reemplazo de cron que maneja múltiples zonas horarias

Solución 1:

fcron es compatible con esta función.

De la documentación de la opción "timezone" en fcrontab(5):

Ejecute el trabajo en la zona horaria dada. timezone-name es una cadena que es válida para la variable de entorno TZ:consulte la documentación de su sistema para obtener más detalles. Por ejemplo, "Europa/París" es válido en un sistema Linux. Esta opción maneja correctamente los cambios de horario de verano. La variable de entorno TZ se establece en el valor de la zona horaria cuando se ejecuta un trabajo que define esta opción.

Solución 2:

Creo que estás tratando de tener las dos cosas y la realidad es que simplemente no puedes. Si desea que un trabajo se ejecute a las 8 a.m., hora local, por ejemplo, independientemente de si el horario de verano está activo, entonces ejecute su sistema (y cron) en hora local y no realice ediciones estacionales o lo ejecute en UTC ( no GMT) y hacer ediciones estacionales. Si desea que sus trabajos se ejecuten en el mismo UTC, independientemente , luego ejecuta cron según UTC y no hay nada más que hacer.

Si lo que desea es que un usuario pueda programar un trabajo cron de acuerdo con su zona horaria local y no tener que pensar en las conversiones para su conveniencia luego escribe un script de conversión que acepta una especificación cron y una zona horaria, luego realiza la conversión a UTC detrás de escena y edita el crontab para él. Incluso podría ser una conversión bidireccional para manejar los cambios en las entradas existentes.

Será útil si nos dices lo que realmente estás tratando de lograr .

Solución 3:

Podrías escribirte un pequeño envoltorio que tome tres argumentos:

  • Hora de la zona horaria objetivo para que coincida
  • Zona horaria objetivo
  • Comando para ejecutar si la hora objetivo en tz coincide con la hora actual (en tz objetivo).

Luego simplemente coloque esa línea de envoltorio en su crontab para que se ejecute cada hora:

python tz_wrapper.py 14 "US/Mountain" "echo 'hi'"

Versión simple de python:

#!/usr/bin/python
import sys, os, datetime
import pytz

arg_hour = sys.argv[1]
arg_timezone = sys.argv[2]
arg_cmd = sys.argv[3]

target_tz = pytz.timezone(arg_timezone)
target_hour = pytz.utc.localize(datetime.datetime.utcnow()).astimezone(target_tz).strftime("%H")

if target_hour == str(arg_hour):
    os.system(arg_cmd)

Linux
  1. DSH:ejecute un comando de Linux en varios hosts a la vez

  2. Agregar múltiples zonas horarias en Ubuntu Linux - ¿Seguir este procedimiento?

  3. ¿Ejecutar verdaderas instancias de múltiples procesos de Gnome-terminal?

  4. Cuatro tareas en paralelo... ¿Cómo hacer eso?

  5. ¿Ejecutar un comando que está sombreado por un alias?

Cómo ejecutar trabajos cron cada 5, 10 o 15 minutos

Cómo agregar varias zonas horarias en Linux

Cómo agregar varias zonas horarias en Ubuntu

Programación con cron &At

¿Ssh a múltiples hosts y ejecutar un comando?

Ejecutar comandos con límite de tiempo en Ubuntu 20.04