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. ]