Cron
es uno de los UNIXismos más reconocibles del mundo de la informática. Incluso las personas de TI que no administran servidores Linux han oído hablar de esa bestia misteriosa, el "trabajo cron". Y los administradores de Linux saben que los trabajos cron son infinitamente útiles. De hecho, es discutible que el cron
El sistema fue uno de los primeros progenitores de la moda de la automatización. Si había algo que sabías que un humano podría olvidarse de hacer, cron
fue la respuesta.
Sin embargo, donde cron
Excels es repetición y, a veces, no es necesario que un trabajo se ejecute cada hora, todos los días o todas las semanas. Solo necesita que un trabajo se ejecute según lo programado, y configurar una alarma para recordarlo no parece ser la forma de UNIX. Lo que necesitas es el at
comando, una pequeña utilidad que puede usar para crear una cola de trabajos programados para ejecutarse en un momento específico en el futuro.
Configuración
Antes de usar at
comando, debe tener un script de shell que desee ejecutar en algún momento. Como de costumbre, su script debe tener una línea de "cookie mágica" o "shebang" en la parte superior del archivo para establecer qué shell usar para su ejecución.
Para este ejemplo, cree un script simple que cree un archivo en /tmp
:
#!/bin/sh
DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0
Haga que el script sea ejecutable y luego pruébelo:
$ chmod +x test.sh
$ ./test.sh
Ver el contenido de /tmp/at.log
archivar el script creado:
$ cat /tmp/at.log
hello world 1588482185
Programar un trabajo
Puede programar un trabajo utilizando una marca de tiempo o con lenguaje natural. Si usa lenguaje natural o formatos de hora simples, entonces no se requiere ninguna opción antes de especificar la hora.
Por ejemplo, para programar test.sh
para ejecutarse inmediatamente, puede usar la palabra clave now
:
$ at now -f test.sh
warning: commands will be executed using /bin/sh
job 1 at Mon Feb 24 01:23:00 2020
$ cat /tmp/at.log
hello world 1588482620
Puede establecer una compensación desde ahora usando minutes
, hours
, days
, weeks
, o years
.
$ at now + 1 day -f test.sh
warning: commands will be executed using /bin/sh
job 2 at Tue Feb 25 01:27:00 2020
Los years
la palabra clave no está documentada y seconds
no es apoyado. También puede especificar horas comunes, como midnight
, noon
y teatime
(son las 16:00).
Los tiempos simples también funcionan:
$ at 21:12 -f test.sh
warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020
Para programar una fecha del calendario a una hora específica, debe usar -t
opción y cualquier formato de hora compatible con POSIX. Por ejemplo, usando el formato AAAAMMDDHHMM:
$ at -t 202003141509 -f test.sh
warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020
[ ¿Busca una automatización de sistemas más avanzada? Comience con The Automated Enterprise, un libro gratuito de Red Hat. ]
Tubos
Puede enviar comandos a at
a través de una tubería UNIX:
$ echo "hello world" > /tmp/at.log | at now
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:28:00 2020
$ cat /tmp/at.log
hello world
Trabajos por lotes
El batch
comando (o at -b
) ejecuta un comando tan pronto como lo permitan los recursos del sistema. Si la carga de su sistema es alta, puede usar batch
para poner en cola su trabajo para que se ejecute cuando haya ciclos de CPU de sobra.
$ echo "Cycles to spare" > /tmp/at.log | batch
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:31:00 2020
Viendo tu cola
El atq
comando muestra su at
cola. Esto le da el ID del trabajo, la hora en que está programado que se ejecute cada trabajo, la cola en la que se agrupa cada trabajo (a
para el at
cola o b
para el batch
queue) y el nombre de usuario del propietario de la cola. El propietario de la cola suele ser usted mismo, a menos que esté ejecutando atq
como raíz, en cuyo caso verá todos los at
de los usuarios colas.
$ atq
2 Tue Feb 25 01:27:00 2020 a seth
3 Mon Feb 24 21:12:00 2020 a seth
4 Sat Mar 14 15:09:00 2020 a seth
5 Mon Feb 24 01:31:00 2020 b seth
Puede crear y nombrar sus propias colas usando cualquier carácter único c-z o A-Z . Ambos a
y b
son designaciones reservadas para at
y batch
, y cualquier cola con una letra mayúscula se trata como un batch
trabajo. Colas con nombres que siguen alfabéticamente a a
y b
se ejecutan con una amabilidad cada vez mayor.
Vista previa de su trabajo
Cuando envía un comando o script a at
, su directorio de trabajo actual, entorno (excluyendo BASH_VERSINFO
, DISPLAY
, EUID
, GROUPS
, SHELLOPTS
, TERM
, UID
y _
) y la umask se conservan. Si su comando espera una configuración de entorno específica, debe configurarla mientras pasa el comando a at
o anularlos en su secuencia de comandos.
Para ver cómo se ejecutará su comando, use -c
opción junto con el número de trabajo:
$ at -c 4
#!/bin/sh
# atrun uid=1006 gid=1006
# mail seth 0
umask 22
CPLUS_INCLUDE_PATH=/usr/lib64/qt/include; export CPLUS_INCLUDE_PATH
MANPATH=/usr/local/man:/usr/man:/usr/lib64/adoptopenjdk12.0.2/man; export MANPATH
KDE_MULTIHEAD=false; export KDE_MULTIHEAD
[...]
Eliminando trabajos
Puede eliminar trabajos pendientes de su at
hacer cola usando el atrm
comando y el ID del trabajo. Si no conoce la identificación del trabajo, use atq
para ver tu cola primero.
$ atq
6 Fri Jan 01 00:00:00 2038 a seth
$ atrm 6
$ atq
Programar con at
El at
el comando es un poco como un cron
menor sistema. Es útil para la ejecución de comandos de una sola vez y es fácil de usar. Si has estado usando cron
o sleep
para compensar el tiempo de ejecución de un comando, eche un vistazo a at
y batch
.
[ ¿Necesita aprender más sobre la administración del sistema Linux? Considere tomar un curso de administración de sistemas de Red Hat. ]