Actualmente, estoy usando máquinas virtuales en la nube para ejecutar mi código y, por eso, tengo asignada una nueva máquina virtual que se encuentra en una zona horaria diferente. Quiero ejecutar un script de bash que ejecute un script de python a las 7:30 p. m. (hora del este). Desde aquí , sé cómo ejecutar un script bash en un momento específico, por ejemplo, echo "ls -l" | at 07:00 . Desde aquí sé cómo obtener la hora actual de la hora del Este, por ejemplo, TZ=America/New_York date . Además, desde aquí sé cómo obtener solo la hora usando la date +%R .
Soy un codificador de Python e hice todo lo posible para escribir un código sudo que muestre lo que estoy tratando de lograr como un script bash:
while true do Now=TZ=America/New_York date +%R if [Now -eq 7:30pm] then python3 myfile.py doneComo ya sabe cómo configurar el comando at para ejecutar un comando a la hora especificada y cómo convertir el EST a la hora local, puede combinarlos:
echo "python3 myfile.py" | at $(date -d "19:30 EST" +%R) Cuando invoca el comando at , siempre advierte que "los comandos se ejecutarán usando /bin/sh". Solo importará si invocamos un comando específico de bash como:
echo "shopt -s globstar; ls **" | at ..que fallará.
En nuestro caso, el comando python3 myfile.py se ejecutará tanto con /bin/sh como con /bin/bash , entonces no se preocupe por la advertencia.
date -d STRING interpreta la STRING como una representación de fecha/hora e imprime la fecha/hora convertida en el formato especificado +%R .
Si desea enviar la salida a un archivo, puede decir:
echo "python3 myfile.py > /path/to/a/file" | at $(date -d "19:30 EST" +%R) Para enviar al terminal actual, primero identifique el terminal con el comando tty :
$ tty => /dev/pts/0Luego redirija la salida a la terminal con:
echo "python3 myfile.py > /dev/pts/0" | at $(date -d "19:30 EST" +%R)