Si desea programar un trabajo de Linux que sucederá solo una vez, cron
es excesivo. ¡La at
familia de comandos es lo que necesitas! Y si desea ejecutar procesos solo cuando su sistema tenga recursos libres, puede usar batch
.
El cron
daemon mantiene una lista de trabajos que ejecuta en momentos específicos . Estas tareas y programas se ejecutan en segundo plano a la hora programada. Esto le ofrece una gran flexibilidad para programar tareas que deben repetirse. Ya sea que necesite ejecutar una tarea una vez cada hora, a una hora específica cada día, o una vez al mes o al año, puede configurarla en cron
.
Sin embargo, esto no ayuda si desea programar una tarea para que se ejecute solo una vez. Claro, puede configurarlocron
, pero luego debe recordar regresar y eliminar la entrada crontab después de que se ejecute la tarea, lo cual es inconveniente.
Con Linux, si está luchando con un problema, es casi una garantía de que alguien más también ha luchado con él. Afortunadamente, debido a que los sistemas operativos tipo Unix han existido durante tanto tiempo, también existe una excelente posibilidad de que alguien haya creado una solución a su problema.
Para el problema descrito anteriormente, lo han hecho y se llama at
.
Tuvimos que instalarlo at
en Ubuntu 18.04 y Manjaro 18.1.0 (ya estaba instalado en Fedora 31).
Para instalar at
en Ubuntu, use este comando:
sudo apt-get install en
Una vez completada la instalación, puede iniciar el at
demonio con este comando:
sudo systemctl enable --ahora atd.service
En Manjaro, se instala at
con este comando:
sudo pacman -Sy en
Una vez completada la instalación, escriba este comando para iniciar el at
demonio:
sudo systemctl enable --ahora atd.service
En cualquier distribución, puede escribir este comando para asegurarse de que el atd
demonio se esté ejecutando:
ps -e | grep atd
Para usarlo at
, debe asignarle una fecha y hora para que se ejecute. Existe una gran flexibilidad en la forma en que puede escribirlos, que cubriremos más adelante en este artículo.
Sin embargo, aunque lo usaremos de forma at
interactiva, debe proporcionar la fecha y la hora por adelantado. Si no incluye nada en la línea de comando, o escribe algo que no es una fecha y hora, at
responde con «Hora ilegible», como se muestra a continuación:
a
en banana
Las fechas y horas pueden ser explícitas o relativas. Por ejemplo, digamos que desea que un comando se ejecute dentro de un minuto. at
sabe lo que significa «ahora», por lo que puede usarlo now
y agregarle un minuto, así:
ahora + 1 minuto
at
imprime un mensaje y una at
indicación, y espera a que escriba los comandos que desea programar. Primero, sin embargo, considere el mensaje, como se muestra a continuación:
Le dice que at
lanza una instancia del sh
shell y ejecutará los comandos dentro de ella . Sus comandos no se ejecutarán en el shell Bash, que es compatible con el sh
shell pero tiene un conjunto de funciones más rico.
Si sus comandos o scripts intentan usar una función o instalación que proporciona Bash, pero sh
no lo hace, fallarán.
Es fácil probar si sus comandos o scripts se ejecutarán sh
. Utilice el sh
comando para iniciar un sh
shell:
sh
El símbolo del sistema cambia a un signo de dólar ( $
) y ahora puede ejecutar sus comandos y verificar que funcionan correctamente.
Para volver al shell de Bash, escriba el exit
comando:
salida
No verá ningún mensaje de error o salida estándar de los comandos. Esto se debe a que el sh
shell se inicia como una tarea en segundo plano y se ejecuta sin ningún tipo de interfaz de pantalla.
Cualquier resultado de los comandos, bueno o malo, se le envía por correo electrónico. Se envía a través del sistema de correo interno a quien ejecuta el at
comando. Esto significa que debe instalar y configurar ese sistema de correo electrónico interno.
Muchos (la mayoría) de los sistemas Linux no tienen un sistema de correo electrónico interno, ya que rara vez se necesita uno. Aquellos que lo hacen suelen utilizar un sistema como sendmail o postfix . Si su sistema no tiene un sistema de correo electrónico interno, puede hacer que los scripts se escriban en los archivos o redirigir la salida a los archivos para agregar registros.
Si el comando no genera ningún mensaje de error o salida estándar , no recibirá un correo electrónico de todos modos. Muchos comandos de Linux indican el éxito a través del silencio, por lo que en la mayoría de los casos, no recibirá un correo electrónico.
Ahora es el momento de escribir un comando at
. Para este ejemplo, vamos a utilizar un pequeño archivo de script llamado sweep.sh
que elimina los *.bak
, *.tmp
y *.o
archivos. Escriba la ruta al comando, como se muestra a continuación, y luego presione Entrar.
Aparece otro símbolo del sistema y puede agregar tantos comandos como desee. Por lo general, es más conveniente tener sus comandos en un solo script y simplemente llamar a ese script desde dentro at
.
Presione Ctrl + D para indicar at
que ha terminado de agregar comandos. at
muestra <EOT>, que significa fin de transmisión . Se le indica el número de trabajo y cuándo está programado su ejecución, como se muestra a continuación:
Después de que se ejecute el trabajo, escriba lo siguiente para verificar su correo interno:
correo
Si no hay correo, debe asumir el éxito. Por supuesto, en este caso, se puede comprobar y ver si el *.bak
, *.tmp
y *.o
se han eliminado archivos para confirmar el comando funcionó.
Escriba lo siguiente para ejecutar todo de nuevo:
ahora + 1 minuto
Después de un minuto, escriba lo siguiente para volver a revisar su correo:
correo
¡Oye, tenemos correo! Para leer el mensaje número uno, presione 1 y luego presione Enter.
Recibimos un correo electrónico de at
porque los comandos del script generaban mensajes de error. En este ejemplo, no había archivos para eliminar porque cuando ejecutamos el script anteriormente, los eliminó.
Presione D + Enter para eliminar el correo electrónico y Q + Enter para salir del programa de correo.
Tiene mucha flexibilidad en lo que respecta a los formatos de hora que puede utilizar at
. Aquí están algunos ejemplos:
a las 11:00 AM
mañana a las 11:00
a las 11:00 AM la semana que viene
la semana que viene
a las 11:00 AM el próximo viernes
el próximo viernes
a las 11:00 a.m. del próximo mes
a las 11:00 AM 15/03/2020
ahora + 30 minutos
ahora + 2 horas
mañana
el jueves
a la medianoche
al mediodía
a la hora del té
Puede escribir el atq
comando para ver la cola de trabajos programados, como se muestra a continuación.
Para cada comando en la cola, atq
muestra la siguiente información:
at
van a la cola «a», mientras que las tareas con las que programa batch
(tratadas más adelante en este artículo) van a la cola «b»No tiene que usarlo de forma at
interactiva; también puede usarlo en el comando. Esto facilita el uso de scripts internos.
Puede canalizar comandos at
, así:
echo "sh ~ / sweep.sh" | en 08:45 AM
El trabajo es aceptado y programado por at
, y el número de trabajo y la fecha de ejecución se informan como antes.
También puede almacenar una secuencia de comandos en un archivo y luego pasarlo a at
. Puede ser un archivo de comandos de texto sin formato, no tiene que ser un script ejecutable.
Puede utilizar la -f
opción (archivo) de la siguiente manera para pasar un nombre de archivo a at
:
ahora + 5 minutos -f clean.txt
Puede lograr el mismo resultado si redirige el archivo a at
:
ahora + 5 minutos <clean.txt
Para eliminar un trabajo programado de la cola, puede usar el atrm
comando. Si primero desea ver la cola para encontrar el número del trabajo que desea eliminar, puede usar atq
. Luego, use ese número de trabajo con atrm
, como se muestra a continuación:
atq
atrm 11
atq
Como mencionamos anteriormente, puede programar trabajos en el futuro. A veces, es posible que olvide lo que va a hacer un trabajo. El atq
comando le muestra los trabajos en la cola, pero no lo que van a hacer. Si desea ver una vista detallada de un trabajo, puede utilizar la -c
opción (cat).
Primero, usaremos atq
para encontrar el número de trabajo:
atq
Ahora, usaremos el trabajo número 13 con la -c
opción:
en -c 13
Aquí hay un desglose de la información que obtenemos sobre el trabajo:
sh
shell.at
comando.at
enviados.sh
sesión. La máscara se resta de 666, lo que nos da 644 (el equivalente octal de rw-r--r--
).sh
shell.El batch
comando opera de manera similar al at
comando, pero con tres diferencias significativas:
batch
comando de forma interactiva.batch
comando los ejecuta cuando la carga promedio del sistema es inferior a 1.5.batch
comando.Cuando usa el batch
comando, lo llama por su nombre sin parámetros de línea de comando como este:
lote
A continuación, agregue tareas como lo haría con el at
comando.
Los archivos at.allow
y at.deny
controlan quién puede usar la at
familia de comandos. Estos se encuentran dentro del /etc
directorio. De forma predeterminada, solo at.deny
existe el archivo y se crea cuando at
se instala.
Así es como funcionan estos:
at.deny
: Enumera las aplicaciones y entidades que no se pueden usar at
para programar trabajos.at.allow
: Enumera quién puede utilizar at
para programar trabajos. Si el at.allow
archivo no existe, at
solo usa el at.deny
archivo.De forma predeterminada, cualquiera puede usar at
. Si desea restringir quién puede usarlo, use el at.allow
archivo para enumerar los que pueden. Esto es más fácil que agregar at
al at.deny
archivo a todos los que no pueden usar .
Así at.deny
es como se ve el archivo:
sudo menos /etc/at.deny
El archivo enumera los componentes del sistema operativo que no se pueden usar at
. Muchos de estos no pueden hacerlo por razones de seguridad, por lo que no desea eliminar ninguno del archivo.
Ahora, editaremos el at.allow
archivo. Vamos a agregar dave
y mary
, pero nadie más podrá usar at
.
Primero, escribimos lo siguiente:
sudo gedit /etc/at.allow
En el editor, agregamos los dos nombres, como se muestra a continuación, y luego guardamos el archivo.
Si alguien más intenta usar at
, se le dirá que no tiene permiso. Por ejemplo, digamos que un usuario con nombre eric
escribe lo siguiente:
a
Sería rechazado, como se muestra a continuación.
Nuevamente, eric
no está en el at.deny
archivo. Tan pronto como ingrese a alguien en el at.allow
archivo, a todos se les niega el permiso de uso at
.
Como puede ver, ambos at
y batch
son ideales para tareas que solo necesita ejecutar una vez. Nuevamente, como una revisión rápida:
at
.batch
.El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…
Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…
LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…
Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…
Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…
fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…