[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

¡Esta es una revisión vieja del documento!


Translation in progress (pedro.herrero)

Programación de tareas en Linux

Panorama general

Este artículo discute algunas herramientas usadas en un sistema Linux para programar tareas para que se ejecuten automáticamente en intervalos de tiempo específicos o en un momento dado en el futuro. Este manual no cubrirá estos comandos en profundidad; es sólo una breve introducción al uso de estos comandos. Consulte el CÓMO individual de cada comando para obtener una visión más detallada de todas las opciones y configuraciones relevantes.

Algunos dæmons de programación de tareas utilizados en Linux/UNIX lo son:

  • at – programar tareas puntuales para el futuro
  • cron – el programador periódico más utilizado
  • anacron – cron anacrónico; un programador periódico que no depende de que el sistema se deje en funcionamiento las 24 horas del día, los 7 días de la semana.

Uso de at

El comando at permite al usuario ejecutar comandos o scripts a una hora (requerido) y fecha (opcional) específicas. Los comandos se pueden introducir a través de una entrada estándar, redirección o archivo.

darkstar:~% at

at interactivo

Usar el comando at con entrada estándar (teclado) es un poco más complicado que escribir una línea en el prompt. El comando utiliza una “sub-shell” interna para recopilar la información requerida. Una vez que se haya completado la entrada de la información del comando, Ctrl+D (EOT) significará que se ha completado la entrada. El indicador -m especifica que se enviará un mensaje de correo al usuario cuando finalice el trabajo, independientemente de si se ha creado alguna salida.

darkstar:~% at 12:01 -m
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> ./my_script.sh
at> <EOT>
job 4 at 2015-06-22 12:01 
darkstar:~% 

at dirigido por archivos

Los comandos también pueden estar contenidos dentro de un archivo y ser ejecutados por at:

darkstar:~% at 12:32 -m -f /usr/local/bin/my_script.sh
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 8 at 2015-06-22 12:10

El indicador -m enviará un correo electrónico al usuario después de completar el comando; el indicador -f especifica que el comando leerá el trabajo desde un archivo, no desde una entrada estándar. Después de escribir el comando (y se muestre la advertencia correspondiente), se muestra el número de trabajo at 1).

Programación interna de at

Los números de trabajo proporcionados después de escribir un comando, o cuando se lee un archivo, permiten al usuario saber qué trabajo interno se ejecutará en orden secuencial. Si un usuario desea borrar una tarea específica, todo lo que necesita saber es el número de trabajo interno. Para eliminar el trabajo, se utiliza el comando atrm (at_remmove):

darkstar:~%  at -l
7      2015-06-22 12:10 p tux
8      2015-06-22 12:15 p root

El comando atq (atat queue) es el mismo que at -l: <code> darkstar:~% atq 7 2015-06-22 12:10 p tux 8 2015-06-22 12:15 p root </code> Para quitar el trabajo del usuario, utilice atrm con el número de trabajo: <code> darkstar:~% atrm 7 </code> =====Using cron===== cron is a daemon that runs tasks in the background at specific times. For example, if you want to automate downloads of patches on a specific day (Monday), date (2 July), or time (1300), cron will allow you to set this up in a variety of ways. The flexibility inherent in cron can allow administrators and power users to automate repetitive tasks, such as creating backups and system maintenance. cron is usually configured using a crontab file. The following command will open your user account crontab file: <code> darkstar:~% crontab -e </code> To edit the system-level crontab, first log into the root account: <code> darkstar:~# crontab -e </code> If your system has sudo installed, type in: <code> darkstar:~% sudo crontab -e </code> The crontab file syntax is: <code> # * * * * * command to execute # │ │ │ │ │ # │ │ │ │ │ # │ │ │ │ └───── day of week (0 - 6) (Sun(0) /Mon (1)/Tue (2)/Wed (3)/Thu (4)/Fri (5)/Sat (6)) # │ │ │ └────────── month (1 - 12) # │ │ └─────────────── day of month (1 - 31) # │ └──────────────────── hour (0 - 23) # └───────────────────────── min (0 - 59) </code> Using an asterisk in any placeholder location, will match any value. For example, the following will run example_script.sh at noon (1200) everyday during the first three months of the year: <code> #For more information see the manual pages of crontab(5) and cron(8) # # min hr day month weekday command # # 0 11 * 1-3 * /home/user/example_script.sh </code> =====Using anacron===== <note> anacron is not installed in Slackware by default.2) </note> anacron is unique from cron in the respect that it does not expect the operating system to be running continuously like a 24×7 server. If the time of execution passes while the system is turned off, anacron executes the command automatically when the machine is turned back on. The reverse is not true for cron - if the computer is turned off during the time of scheduled execution, cron will not execute the job. Another key difference between anacron and cron is the minimum chronological “granularity” - anacron can only execute jobs by day, versus the ability of cron to execute by the minute. Finally, anacron can only be used by root, while cron** can be used by root and normal users. ====== Sources ====== * Originally written by vharishankar * Contrbutions by mfillpot, tdrssb * Example crontab example modified from en.wikipedia.org/wiki/cron

1)
A diferencia de un ID de proceso (PID) conocido por el sistema operativo
2)
See Slackbuilds.org for more information on anacron on Slackware