Cómo programar tareas en Linux con Cron y Crontab

La capacidad de automatizar tareas es una de esas tecnologías futuristas que ya está aquí. Todos los usuarios de Linux pueden beneficiarse del sistema de programación y las tareas de los usuarios, gracias a cron, un servicio en segundo plano fácil de usar.

La capacidad de automatizar tareas es una de esas tecnologías futuristas que ya está aquí.  Todos los usuarios de Linux pueden beneficiarse del sistema de programación y las tareas de los usuarios, gracias a cron, un servicio en segundo plano fácil de usar.
Anuncio

¿Sabías que Blade Runner se estableció en 2019? ¡Eso es dentro de tres años! Por no hablar de Back to the Future 2, donde viajaron en el tiempo hasta 2015. Sin embargo, no tenemos autos voladores y no hay replicantes entre nosotros (hasta donde yo sé).

linux-cron-jobs-quote

Es fácil sentirse decepcionado con la tecnología actual cuando la comparamos con representaciones ficticias del futuro. Aún así, estos días nuestros teléfonos, computadoras e incluso casas pueden hacer cosas increíbles. 5 Proyectos de automatización del hogar de DIY para comenzar con su hogar inteligente 5 Proyectos de automatización del hogar de DIY para comenzar con su hogar inteligente Cuando se trata de crear hogares inteligentes, la mayoría de las personas simplemente no sé por dónde empezar. Aquí hay cinco proyectos básicos de hogares inteligentes para principiantes que puede construir en este momento. Lee mas . La capacidad de automatizar tareas es una de ellas.

Cada usuario de Linux puede beneficiarse de las tareas de programación, ya sea relacionadas con el sistema (como limpiar registros antiguos y actualizar paquetes Cómo actualizar una o todas las aplicaciones en Linux en segundos Cómo actualizar una o todas las aplicaciones en Linux en segundos La terminal de Linux hace que sea sencillo actualizar una sola aplicación en su computadora, o aplicar todas las actualizaciones disponibles a la vez. Así es cómo: Leer más) o servir al usuario (consultar el correo electrónico, descargar podcasts ...). Los usuarios de Windows han tenido el Programador de tareas 4 Tareas aburridas que puede automatizar con el Programador de tareas de Windows 4 Tareas aburridas que puede automatizar con el Programador de tareas de Windows Su tiempo es demasiado valioso como para desperdiciarlo con tareas repetitivas. Permítanos mostrarle cómo automatizar y programar tareas. También tenemos algunos buenos ejemplos. Lea más desde Windows 95. La utilidad que hace el mismo trabajo en Linux se llama cron, y aquí explicaremos cómo usarla.

¿Qué es Cron?

Cron es un servicio de sistema que se ejecuta en segundo plano, comprueba las tareas programadas y las ejecuta si encuentra alguna. Las tareas, también denominadas "trabajos cron 5 Beginner Linux Setup Ideas para Cron Jobs & Shell Scripts 5 Beginner Linux Setup Ideas para Cron Jobs y Shell Scripts Con bash scripting, puede realizar una compleja serie de tareas de una sola vez, por lo que es ideal para necesidades elaboradas y repetitivas. También es una excelente forma de conocer la terminal. Leer más "- están definidos en archivos de configuración especiales (crontabs), que cron escanea cada minuto. Se pueden encontrar varias versiones de cron en diferentes distribuciones de Linux. Por ejemplo, el tenedor de cron de Fedora se llama cronie, y también hay fcron, bcron y dcron. Algunos tienen características adicionales, mientras que otros están más enfocados en la seguridad, pero todos están basados ​​en la misma idea.

Esta guía está escrita para vixie-cron, que es la versión más extendida de cron y la que encontrarás en Ubuntu y sus derivados. Si bien la mayoría de las instrucciones se aplican a otras implementaciones de cron también, puede haber pequeñas diferencias, por lo que consulte sus manuales si decide cambiar.

¿Qué es un Crontab?

Si realmente quieres administrar tu tiempo, probablemente tengas un calendario de algún tipo Organiza tu tiempo con estas 4 aplicaciones de calendario de Linux Organiza tu tiempo con estas 4 aplicaciones de calendario de Linux ¿Tiene sentido seguir usando una aplicación de calendario de escritorio? Creemos que sí, especialmente para habilitar el acceso a eventos en cualquier dispositivo sincronizado. Estas aplicaciones de calendario de Linux son particularmente útiles. Leer más: una aplicación o al menos una hoja de papel. Crontab se parece mucho al calendario de tu computadora. Contiene la información sobre las tareas programadas, indicando a cron qué comandos ejecutar en cada momento.

De hecho, varios crontabs están en su sistema. Cada usuario tiene su propio crontab, incluido root (el administrador). Los crontabs de usuario se almacenan en /var/spool/cron/crontabs/ . El comando crontab -l listará el archivo crontab para el usuario actual. Puede verificar el crontab raíz con sudo crontab -l .

Además, está el archivo crontab del sistema /etc/crontab que se utiliza para tareas de todo el sistema. Por lo general, toman la forma de guiones ejecutables, propiedad de root, ubicados en /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ y /etc/cron.monthly/ carpetas, y en algunas distribuciones, la carpeta /etc/cron.d/ también. En general, no debería tener que lidiar con estas tareas, ya que la mayoría de ellas son creadas automáticamente por las aplicaciones instaladas.

Cómo programar las tareas con Cron

Parece simple: para programar tareas, solo agréguelas a su crontab. Como crontab es un archivo de configuración especial, no se recomienda editarlo manualmente. En su lugar, use el comando crontab -e . Para editar los crontabs de root u otros usuarios, ejecute el comando con privilegios administrativos y agregue su nombre de usuario después de la opción -u:

sudo crontab -u root -e
sudo crontab -u username -e

linux-cron-jobs-crontab-editor

El archivo crontab tiene dos secciones. El primero contiene variables de entorno que se configuran automáticamente. Puede cambiar de forma segura las variables PATH, HOME y SHELL, y modificar la variable MAIL.

La segunda parte del archivo es el "calendario" real con sus tareas programadas. Cada tarea ocupa una línea (fila) en la tabla, con columnas que representan los siguientes valores:

linux-cron-jobs-crontab

Para programar tareas con éxito, necesita conocer un poco sobre la sintaxis de crontab:

  • Los números deben ser enteros (números enteros), y puede usar el asterisco (*) en cualquiera de las columnas como un comodín, que significa "cada minuto / día / mes ...".
  • En la columna "Día del mes", tenga cuidado de no establecer una fecha que no ocurra en el mes especificado en la columna "Mes" (por ejemplo, 30 de febrero).
  • Las columnas "Mes" y "Día de la semana" aceptan nombres cortos durante meses y días, respectivamente, y no distinguen entre mayúsculas y minúsculas.
  • En la columna "Día de la semana", tanto 0 como 7 representan el domingo. La columna "Hora" requiere el formato "hora militar" (24 horas), pero no puede usar el número 24; en cambio, 0 significa 12 am Esto se debe a que los valores de minuto, hora y día de la semana comienzan en 0 en lugar de 1.
  • Los segundos no son compatibles, por lo que no puede programar una tarea en un segundo en particular.

Lo que puede hacer es programar rangos de tiempo inclusivos usando un guión (14-22 en "Horas" ejecutará la tarea continuamente de 2 pm a 10 pm), o ejecutar una sola tarea varias veces definiendo una lista separada por comas (1, 3, 5 en "Día de la semana" ejecutará la tarea los lunes, miércoles y viernes).

Mientras tanto, los valores de paso están representados por una barra inclinada (/), y estos indican la cantidad de saltos dentro de un rango; por ejemplo, 3-20 / 3 en "Horas" ejecutará la tarea cada tres horas de 3 a.m. a 8 p.m. Esto es útil cuando desea repetir tareas cada X horas, porque puede combinar un asterisco y un paso (* / X). Puede combinar rangos con listas y pasos con rangos siempre que use números. En otras palabras, las combinaciones como "jan-mar" o "Tue, Fri-Sun" no están permitidas.

Alternativamente, en lugar de establecer un valor para cada columna, puede simplemente escribir @weekly, @yearly, @monthly, @daily o @hourly al principio de una fila, seguido de un comando. Programado de esta manera, las tareas se ejecutarán en la primera instancia posible, por lo que @weekly se ejecutará a la medianoche del primer día de la semana. Si desea ejecutar una tarea inmediatamente cuando se inicia el sistema (re), use el comando @reboot.

linux-cron-jobs-crontab-example

En este ejemplo, hemos programado una copia de seguridad todos los días a las 08:20 y 20:20. El fondo de pantalla cambia automáticamente cada tres días a las 19:00 y un script verificará si hay nuevos podcasts Las 10 mejores aplicaciones para administrar podcasts en Linux Las 10 mejores aplicaciones para administrar podcasts en Linux Linux no tiene una gran selección de clientes de podcasts, pero no se preocupe: casi todos los reproductores de música modernos para Linux pueden servir como podcatcher. Echemos un vistazo a las opciones. Lea más todos los lunes a las 10:20 y 20:20. Un recordatorio de cumpleaños está configurado para el 25 de marzo y se ejecuta cada 30 minutos dentro del marco de tiempo especificado. Finalmente, un script verifica el correo electrónico cada 15 minutos de 8 a 20, pero solo en días laborables. Puede organizar su crontab con espacios y pestañas entre columnas, pero no dentro de ellas (no ponga espacios entre comas, guiones y barras inclinadas).

Si todo esto suena demasiado complicado, no se preocupe: siempre puede confiar en Internet. Herramientas como Crontab Generator, Crontab.guru y Corntab lo ayudan a crear trabajos cron sin conocer ninguna sintaxis de crontab. Le muestran cuándo el trabajo se ejecutará a continuación y proporcionan plantillas para expresiones comúnmente utilizadas. Crontab.guru es el mejor del grupo porque le permite probar en tiempo real la sintaxis de crontab, para que pueda ver de inmediato cómo afectarán sus cambios al cronograma.

linux-cron-jobs-crontab-guru

Cómo comprobar si se ejecutan trabajos cron

Se supone que Cron se ejecuta silenciosamente en segundo plano y le permite trabajar sin interrupciones mientras se ocupa de sus tareas. Pero, ¿cómo puedes asegurarte de que realmente está funcionando?

Cron tiene una función de notificación de correo electrónico incorporada, pero esto requiere configurar al menos un simple servidor de correo local ¿Cómo funciona un servidor de correo electrónico? [Tecnología explicada] ¿Cómo funciona un servidor de correo electrónico? [Explicación de la tecnología] Detrás de cada correo electrónico hay un potente motor llamado el servidor de correo electrónico que envía los correos electrónicos a través de Internet. Lee mas . No muchos usuarios domésticos están dispuestos a configurar esto, y no muchas distribuciones lo proporcionan por defecto (por ejemplo, Ubuntu no lo hace). La forma más rápida de verificar cron es escanear el registro del sistema con este comando:

cat /var/log/syslog | grep -i cron

linux-cron-jobs-log

La opción -i hace que nuestra consulta no distinga entre mayúsculas y minúsculas. Es posible que cron tenga su propio archivo de registro en algún lugar de /var/log/, así que mira si este comando no produce resultados útiles.

Si necesita guardar la salida de un trabajo cron en particular, puede redirigirlo a un archivo. Proporcione la ruta y el nombre del archivo en la última columna de su crontab, después del comando que desea ejecutar:

30 * * * * /usr/bin/yourcommand>/home/username/logfile.txt

El uso de un solo símbolo> sobrescribirá el archivo cada vez que se ejecuta el comando. Para evitar esto, use >> en su lugar - agrega el resultado al archivo existente.

¿Qué pasa si Cron no está funcionando?

Puede suceder que hayas agregado algunas tareas, revisado los registros del sistema y descubierto que no se están ejecutando como deberían. Aquí hay algunas cosas que debe considerar, y tener cuidado al tratar de solucionar el problema.

¿Se está ejecutando el servicio cron?

Como sabes, cron daemon debería ejecutarse en segundo plano. Asegúrate de que este sea realmente el caso. El servicio se llama crond o simplemente cron.

Para distribuciones usando systemd:

systemctl status cron

Para distribuciones que usan Upstart:

service cron status

linux-cron-jobs-service-status

Si su distribución está utilizando el enfoque "antiguo" System V init, enumere todos los servicios con:

initctl list

y ver si cron está en la lista.

¿Incluso se te permite tener un archivo crontab?

Verifique su carpeta /etc para buscar archivos llamados cron.allow y cron.deny . En Ubuntu, ninguno de los dos debe existir, lo que significa que todos los usuarios pueden administrar trabajos cron. Sin embargo, si hay un archivo cron.allow, debe contener su nombre de usuario. Por el contrario, si existe el archivo cron.deny, su nombre de usuario no debería estar en él. Dejar en blanco el archivo cron.deny significa que solo los usuarios root y usuarios listados en cron.allow pueden tener archivos crontab.

¿Están sus variables establecidas correctamente?

Crontab establece automáticamente su variable SHELL en /bin/sh . Sin embargo, si el caparazón que eliges es el pescado 7 Razones por las que debes instalar el caparazón de pescado 7 Razones por las que debes instalar el caparazón de pescado ¿No te gusta cómo funciona tu terminal Linux? ¿Por qué no instalar un nuevo caparazón? Una de estas conchas es el pez, que presenta características que deberían haberse convertido en algo común, pero no lo fueron. Vamos a ver. Lea más o bash, debe cambiar la variable SHELL . Del mismo modo, la variable PATH contiene solo algunos directorios por defecto. Aquí es donde crontab busca los comandos de Linux. Si su trabajo cron no se puede ejecutar, es posible que crontab no "vea" el comando que ha utilizado. Para evitar esto, agregue los directorios que contienen los comandos a la variable PATH, separados por dos puntos:

PATH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Si no desea editar esto en su crontab, puede definir estas variables en el script que desea ejecutar como un trabajo cron.

¿Tu formato crontab está en el punto?

La sintaxis de Crontab no es exactamente perfecta. Incluso si lo verificas con las herramientas en línea mencionadas anteriormente, un pequeño error podría evitar que cron ejecute tus trabajos. Tenga cuidado de:

  • agregue una línea vacía al final del archivo crontab
  • escape el signo% con una barra diagonal inversa si su comando lo incluye
  • escribir comentarios como líneas separadas comenzando con #. No escriba comentarios en la misma línea que las variables de entorno, o junto a los comandos de cron job.

¿De verdad tienes que usar la terminal?

Absolutamente no. Los usuarios de KDE pueden programar trabajos cron con KCron, que se puede acceder desde el módulo Configuración del sistema> Programador de tareas . Con una interfaz sencilla que le permite elegir y modificar todo en tan solo unos pocos clics de ratón, KCron es un placer de usar.

linux-cron-jobs-kcron

Si prefiere GNOME, entonces el Programa de GNOME es para usted. El enfoque es similar, aunque la interfaz es, esperemos, ligeramente diferente. Ofrece un modo avanzado para modificaciones de grano fino, y viene con un applet de panel desde el que puede administrar tareas directamente.

linux-cron-jobs-gnome-schedule

Debe conocer otras soluciones, como Crontab-UI y Minicron. Son más adecuados para los usuarios que administran varias máquinas y trabajos de cron, y una de sus mejores características es la interfaz basada en web.

linux-cron-jobs-crontabui

¿Hay alguna alternativa Cron?

Mientras cron es más o menos el programador de tareas estándar para Linux Programar y automatizar tareas en Linux con Gnome Programar horario y automatizar tareas en Linux Con Gnome Schedule Read More, ciertamente no es el único. El comando at es perfecto para trabajos rápidos y únicos que se pueden programar directamente desde la línea de comandos, sin archivos de configuración especiales. Si necesita más, existe GNUbatch, que introduce la noción de dependencia. Con GNUbatch, puede establecer condiciones específicas para cada trabajo o hacer que una tarea programada dependa de la anterior. Algo similar se puede lograr con temporizadores systemd. Aunque es menos práctico de configurar que cron, los temporizadores systemd pueden recordar si una tarea no se programó mientras la computadora estaba apagada, y la ejecutan la próxima vez que se enciende.

Esto es algo que cron no puede hacer solo. Como tal, es adecuado para servidores y computadoras que se ejecutan constantemente, pero no ejecutará un trabajo programado mientras la computadora estaba apagada. Aquí es donde anacron entra en juego. Técnicamente no es una "alternativa" o un reemplazo para cron. En cambio, anacron complementa cron y debe usarse junto con él, que es el caso en muchas distribuciones de Linux, incluidos los productos basados ​​en Ubuntu y Ubuntu. Anacron registra cuando se ejecutó por última vez una tarea y comprueba si hubo alguna instancia perdida mientras el sistema estaba apagado. Los ejecutará cuando vuelva a encender la computadora, pero cada tarea se puede ejecutar solo una vez al día.

Algunas versiones de cron, como fcron, ofrecen características de anacron por defecto. Los usuarios avanzados pueden querer ver Hcron o SuperCron, que aportan muchas mejoras a las funciones cron básicas, pero también son un tanto difíciles de gestionar.

¿Que pasa contigo? ¿Cómo organizas tus tareas digitales? ¿Qué tareas programa en Linux? Comparta sus historias y sugerencias para usar cron en los comentarios.

Crédito de la imagen: calendario de Gonzalo Aragon a través de Shutterstock

In this article