Tutoriel Linux

Programar un comando único en Linux sin crear una tarea cron permanente

Débutant3 min de lecture

¿Necesita ejecutar un comando una sola vez esta noche, mañana por la mañana o después de una ventana de mantenimiento? at evita crear una línea cron que luego olvidará. Sin embargo, mantiene una restricción: el servicio atd debe estar en funcionamiento, y el comando se ejecutará a través de /bin/sh, no necesariamente por su intérprete de comandos interactivo.

El método a continuación permite programar, controlar y luego eliminar un trabajo antes de su ejecución. Utilice una ruta absoluta para los scripts y los archivos de registro. Un trabajo at no disfruta de su terminal ni de todos sus ajustes de Bash.

Tux cerca de un servidor, un reloj y un calendario para programar un comando único en Linux
El servicio atd ejecuta un comando único a la hora programada.

Instalar at y verificar el servicio

En Debian, Ubuntu y sus derivados, instale el paquete y luego active el demonio. En Fedora, RHEL o Rocky Linux, reemplace apt por dnf.

sudo apt update
sudo apt install at
sudo systemctl enable --now atd
systemctl status atd --no-pager

El estado debe indicar active (running). Si su cuenta recibe un rechazo, revise /etc/at.allow y /etc/at.deny. Estos archivos determinan qué usuarios tienen el derecho de enviar tareas.

Programar un comando sin dejar un cron

Para probar sin tocar el sistema, cree un pequeño archivo en su carpeta personal en cinco minutos. Escriba el comando y luego termine la entrada con Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# luego presione Ctrl+D

Para una intervención real, evite las rutas relativas. El siguiente trabajo reinicia un servicio mañana a las 02:30 y mantiene stdout y stderr en un registro conocido:

at 02:30 tomorrow
/usr/bin/systemctl restart mi-servicio.service >> /var/log/mi-servicio-at.log 2>&1
# luego presione Ctrl+D

No programe un reinicio o una modificación remota sin haber revisado el comando manualmente. Si trabaja a través de SSH, mantenga una segunda sesión abierta antes de realizar un cambio que pueda interrumpir la red o el servicio.

Revisar el trabajo y controlar la hora de la máquina

atq muestra los trabajos pendientes con su identificador. at -c permite ver el script realmente registrado. Esta revisión es útil cuando una variable, un directorio actual o una redirección son importantes para su comando.

atq
at -c 7
timedatectl status

Reemplace 7 por el número mostrado por atq. Verifique también la zona horaria con timedatectl status. La fecha ingresada en at es interpretada por la máquina que ejecuta el demonio. Un servidor configurado en UTC no necesariamente ejecutará el trabajo a la hora mostrada en su estación de trabajo.

Cancelar un trabajo antes de su ejecución

La eliminación es inmediata. Toma el identificador, elimina el trabajo y luego ejecuta atq para confirmar que ha desaparecido.

atrm 7
atq

Utilice at para una acción puntual: una limpieza después de la migración, un reinicio único o una prueba diferida. Para una tarea repetida, es mejor usar cron y crontab o un temporizador de systemd. Sobre todo, evitará convertir un comando programado una vez en una automatización olvidada.

sudo apt update && sudo apt upgrade