Uso de at para trabajos cron de una sola vez en Linux

Cron es uno de los UNIXismos más reconocibles en el mundo de la computación. Incluso las personas de TI que no administran servidores Linux han oído hablar de esta bestia misteriosa, el "trabajo cron". Y los administradores de Linux saben que los trabajos cron son infinitamente útiles. De hecho, se puede argumentar que la cron El sistema fue un precursor temprano 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 hacer un trabajo a tiempo, y programar una alarma para recordarlo no es como en 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.

Índice

    Instalar

    Antes de usar el at comando, debe tener un script de shell que desee ejecutar en algún momento. Como de costumbre, su secuencia de comandos debe tener una línea de "cookie mágica" o "shebang" en la parte superior del archivo para definir el shell que se 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, luego pruébelo:

    $ chmod +x test.sh
    $ ./test.sh

    Ver contenido de /tmp/at.log archivar el script creado:

    $ cat /tmp/at.log
    
    hello world 1588482185

    Programar un trabajo

    Puede programar una tarea usando una marca de tiempo o en lenguaje natural. Si está utilizando lenguaje natural o formatos de tiempo simples, no se requieren opciones antes de especificar el tiempo.
    Por ejemplo, para programar test.sh para ejecutarse de inmediato, solo 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 un desplazamiento usando minutes, hours, days, weeks, Donde 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

    el years la palabra clave no está documentada, y seconds no es apoyado. También puede especificar tiempos comunes, como midnight, noon, y teatime (Son las 16:00 horas).

    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 utilizar el -t opcion y todo POSIX- formato de hora compatible. 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

    Tubería

    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 los recursos del sistema lo permitan. 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

    Ver tu cola

    el atq comando muestra su at cola. Esto le proporciona 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 ejecute atq como root, en cuyo caso verá todos los usuarios at Líneas de espera.

    $ 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 cz Donde ARIZONA. Los dos a y b son designaciones reservadas para at y batch, y cualquier cola con una letra mayúscula se trata como una batch trabajo. Colas cuyos nombres siguen en orden alfabético a y b se ejecutan con creciente amabilidad.

    Resumen 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 se conservan las máscaras. Si su comando espera una configuración de entorno específica, debe configurarla pasando el comando a at o reemplácelos en su script.

    Para ver cómo se ejecutará su comando, use el -c opción con 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
    [...]

    Recortes de empleo

    Puede eliminar las tareas pendientes de su at hacer cola usando el atrm comando e ID de trabajo. Si no conoce la identificación del trabajo, use atq para mostrar su cola primero.

    $ atq 
    
    6   Fri Jan 01 00:00:00 2038  a  seth
    $ atrm 6
    
    $ atq

    Planificación con a

    el at el comando es un poco como un menor cron sistema. Es útil para la ejecución de un solo comando y es fácil de usar. si usaste cron Donde sleep para compensar el tiempo de ejecución de un comando, mira at y batch.

    Artículos de interés

    Subir