Solo para visitantes de nuestro blog Obtenga 3 meses adicionales gratis + 10% de descuento en el plan trianual YSBLOG10
Agarra el trato

¿Cómo usar tareas cron en un servidor Linux? Explicación de la programación

Trabajos cron en un servidor Linux Son tareas programadas que se ejecutan automáticamente en horas, fechas o intervalos fijos. Las tareas se definen en un archivo crontab mediante una sintaxis de programación concisa (minuto, hora, día, mes, día laborable) y un comando para ejecutar.

Esto le permite automatizar copias de seguridad, actualizaciones, supervisión y mantenimiento rutinario del servidor de forma confiable.

Si eres nuevo en la automatización, aprender a usarla trabajos cron en un servidor Linux Es una de las habilidades administrativas más valiosas. En esta guía, dominarás los fundamentos de crontab, la sintaxis de programación, el registro, la depuración, la seguridad y ejemplos listos para producción, basados ​​en experiencia real con hosting.

¿Qué es Cron y cómo funciona?

Cron es un programador basado en el tiempo en sistemas Unix/Linux. El demonio cron (crond) lee archivos crontab y ejecuta comandos en los momentos especificados. Cada usuario puede tener un crontab personal, y el sistema cuenta con directorios cron globales para tareas estandarizadas.

¿Cómo usar tareas cron en un servidor Linux? Explicación de la programación
  • Usuario crontab: horarios específicos del usuario (a través de crontab -e).
  • crontab del sistema: horarios globales (por ejemplo, /etc/crontab, /etc/cron.d/).
  • Demonio cron: Supervisa continuamente los horarios y ejecuta comandos.

Inicio rápido: Cree su primer trabajo cron

Creemos un simple trabajo cron que escribe una marca de tiempo en un archivo de registro cada 5 minutos.

# Open your user crontab
crontab -e

# Add this line, save and exit:
*/5 * * * * /usr/bin/date >> $HOME/cron-test.log 2>&1

Espere unos minutos y revise el archivo. Si ve marcas de tiempo adjuntas, su tarea cron se está ejecutando correctamente.

Explicación de la sintaxis de programación cron

Cada línea de cron tiene cinco campos de tiempo seguidos del comando. Las cadenas especiales simplifican las programaciones comunes.

# ┌───────── minute (0–59)
# │ ┌─────── hour (0–23)
# │ │ ┌───── day of month (1–31)
# │ │ │ ┌─── month (1–12 or names)
# │ │ │ │ ┌─ day of week (0–7 or names; 0/7=Sun)
# │ │ │ │ │
# * * * * *  command-to-run

# Special strings:
@reboot     run once at startup
@hourly     run once an hour
@daily      run once a day
@weekly     run once a week
@monthly    run once a month
@yearly     run once a year
  • Cada 15 minutos: */15 * * * * /path/script.sh
  • Todos los días a las 02:30: 30 2 * * * /path/backup.sh
  • Los lunes a las 08:00: 0 8 * * 1 /path/report.sh
  • Primer día del mes 00:05: 5 0 1 * * /path/monthly.sh
  • En el arranque: @reboot /usr/local/bin/startup-check.sh

Administrar Crontab: editar, enumerar, eliminar y definir el alcance

Usa crontab a manage Programaciones específicas del usuario. Las programaciones de todo el sistema residen en archivos y directorios bajo /etc.

# Edit current user's crontab
crontab -e

# List jobs
crontab -l

# Remove all jobs (careful!)
crontab -r

# Edit another user's crontab (root only)
sudo crontab -u username -e

# System-wide cron files
/etc/crontab
/etc/cron.d/ (individual files)
/etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/

En muchas distribuciones, /etc/crontab Incluye un campo de usuario. En las crontabs de usuario, omítalo; el trabajo se ejecuta con ese usuario.

Entorno, PATH y permisos

Cron usa un entorno mínimo. Si un comando se ejecuta correctamente en tu shell, pero falla en cron, es probable que falten las variables PATH o de entorno.

# Good practice: set the shell, PATH, and crucial env vars at top of crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=you@example.com
# For apps:
# NODE_ENV=production
# APP_HOME=/var/www/app

Utilice siempre rutas absolutas a los binarios y scripts. Asegúrese de que los scripts sean ejecutables y pertenezcan al usuario correcto.

# Make script executable and secure
chmod 750 /usr/local/bin/backup.sh
chown root:root /usr/local/bin/backup.sh

# Use absolute paths inside scripts
/usr/bin/mysqldump ... > /var/backups/db.sql

Registro, depuración y supervisión de trabajos cron

De forma predeterminada, cron envía la salida por correo electrónico a MAILTOEn muchos servidores, los registros del sistema también registran eventos cron.

  • Revisar registros: /var/log/cron or /var/log/syslog (dependiente de la distribución).
  • Envía la salida a un archivo de registro con marcas de tiempo.
  • Pruebe los comandos de forma interactiva antes de programarlos.
# Log stdout/stderr to a file with timestamps
*/10 * * * * /usr/local/bin/healthcheck.sh >> /var/log/healthcheck.log 2>&1

# Wrap with a logger
*/30 * * * * /usr/local/bin/task.sh 2>&1 | /usr/bin/logger -t task_cron

# Verify cron service
systemctl status cron     # Debian/Ubuntu
systemctl status crond    # CentOS/RHEL/AlmaLinux/Rocky

Si un trabajo no se ejecuta, verifique la hora, la zona horaria, los permisos, SELinux/AppArmor y si el script requiere un TTY o un shell interactivo.

Ejemplos comunes de trabajos cron que puedes copiar

A continuación, se muestran ejemplos de tareas típicas del servidor, optimizadas para producción. Adapte las rutas y los usuarios a su entorno.

# 1) Rotate and compress logs daily at 00:10
10 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

# 2) MySQL database backup every night at 02:00
0 2 * * * /usr/bin/mysqldump -u backup -p'strongPass' --single-transaction --quick --lock-tables=false dbname | /usr/bin/gzip > /var/backups/dbname-$(date +\%F).sql.gz

# 3) Sync files to remote storage at 03:15
15 3 * * * /usr/bin/rsync -az /var/www/ user@backup.example:/data/www/

# 4) Run a WordPress cron alternative every 5 minutes
*/5 * * * * /usr/bin/php -d detect_unicode=0 /var/www/html/wp-cron.php >> /var/log/wp-cron.log 2>&1

# 5) Renew Let's Encrypt certificates twice daily
0 3,15 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

Para los sitios de WordPress, considere deshabilitar el pseudo-cron interno (DISABLE_WP_CRON) y disparador wp-cron.php a través del cron del sistema para una ejecución consistente bajo carga.

Mejores prácticas de seguridad para Cron

  • Privilegios mínimos: Ejecute trabajos como usuario con privilegios mínimos; evite root a menos que sea necesario.
  • Validar scripts: almacenar en directorios seguros con permisos restringidos.
  • Utilice rutas absolutas para evitar riesgos de inyección de PATH.
  • Escapar secretos; preferir archivos env o un secreto manager sobre contraseñas en línea.
  • Restringir el uso de cron: manage /etc/cron.allow y /etc/cron.deny.
  • Registro y alerta: reenvía registros a un SIEM o sistema de alerta.

Cron vs. Systemd Temporizadores vs. Anacron

Cron es universal y sencillo. Los temporizadores systemd añaden dependencia. managemiento, manejo de ejecuciones fallidas y un registro más completo, mientras que Anacron garantiza que se ejecuten trabajos periódicos incluso si el sistema estaba apagado a la hora programada.

  • Utilice cron para programaciones precisas y ligeras.
  • Utilice temporizadores systemd para una orquestación compleja y una puesta al día confiable.
  • Utilice Anacron para computadoras portátiles/instancias que no estén siempre encendidas.
# Example: run script every 15 minutes with systemd timer
# /etc/systemd/system/report.service
[Unit]
Description=Generate report

[Service]
Type=oneshot
ExecStart=/usr/local/bin/report.sh

# /etc/systemd/system/report.timer
[Unit]
Description=Run report every 15 minutes

[Timer]
OnBootSec=2m
OnUnitActiveSec=15m
Unit=report.service

[Install]
WantedBy=timers.target

# Enable
systemctl enable --now report.timer

Cron en hosting compartido y con YouStable

En hosting compartido con cPanel o similar, puedes configurar tareas cron desde el panel de control. La interfaz te permite configurar programaciones, rutas de comandos y notificaciones por correo electrónico sin necesidad de acceder a la consola.

At YouStable, nuestros planes de alojamiento admiten cron a través de la interfaz de usuario y SSHPara sitios WordPress o WooCommerce con mucho tráfico, nuestro equipo puede ayudar a convertir WP-Cron a cron del sistema, ajustar PHP Configure los ajustes de la interfaz de línea de comandos (CLI) y configure registros fiables para que las tareas programadas se ejecuten a tiempo incluso con mucho tráfico.

Lista de verificación de solución de problemas

  • Is cron/crond ¿Corriendo? Consulta con systemctl.
  • ¿Tu horario coincide con tu zona horaria? Verifícalo con date.
  • ¿Se utilizan rutas absolutas para binarios y archivos?
  • ¿El script es ejecutable y pertenece al usuario correcto?
  • ¿Se establecen las variables de entorno necesarias en el crontab?
  • Cualquier salida o error en los registros o correos electrónicos (MAILTO)?
  • ¿Bloqueo de SELinux/AppArmor? Revise los registros de auditoría o configure los contextos adecuados.
  • ¿El comando requiere una entrada TTY o interactiva? Si es así, refactorice.

Consejos prácticos basados ​​en la experiencia de hosting

  • Realice trabajos pesados ​​en lotes durante horas de menor actividad para reducir los picos de carga.
  • Alterne los trabajos relacionados por unos minutos para evitar conflictos.
  • Acelerador con flock para evitar ejecuciones superpuestas en servidores lentos.
  • Controle las versiones de sus scripts y mantenga un registro de cambios vinculado a las ediciones de cron.
  • Pruebe con el mismo usuario que ejecutará el trabajo cron (las diferencias de entorno importan).
# Use flock to prevent overlapping jobs
*/10 * * * * /usr/bin/flock -n /var/run/report.lock /usr/local/bin/report.sh

Preguntas más frecuentes:

¿Cómo puedo enumerar todos los trabajos cron de un usuario?

Ejecutar crontab -l Como usuario para ver su crontab. Como root, use crontab -u username -lLos trabajos de todo el sistema se pueden encontrar en /etc/crontab, /etc/cron.d/, y directorios periódicos como /etc/cron.daily/.

¿Cómo ejecuto una tarea cron cada minuto?

Usa * * * * * como el horario. Ejemplo: * * * * * /usr/local/bin/task.sh >> /var/log/task.log 2>&1Asegúrese de que el script sea ejecutable y utilice rutas absolutas.

¿Dónde se almacenan los registros de cron?

En Debian/Ubuntu, verifique /var/log/syslog para entradas cron; en RHEL/CentOS/AlmaLinux/Rocky, verifique /var/log/cronTambién puede redirigir la salida del trabajo a archivos de registro dedicados para facilitar la depuración.

¿Cuál es la diferencia entre el crontab de usuario y /etc/crontab?

Los crontabs de usuario se ejecutan como el usuario propietario y omiten el campo de usuario. /etc/crontab Es para todo el sistema e incluye un campo de usuario para cada trabajo, lo que le permite especificar qué usuario ejecuta el comando.

¿Por qué mi trabajo cron se ejecuta manualmente pero no en cron?

Generalmente debido a diferencias de entorno: PATH faltante, variables requeridas, permisos o rutas relativas. Establecer SHELL y PATH En crontab, use rutas absolutas y redirija la salida a los registros para capturar errores.

Compartir via:

Sanjeet Chauhan

Sanjeet Chauhan es bloguero y experto en SEO, dedicado a ayudar a los sitios web a crecer orgánicamente. Comparte estrategias prácticas, consejos prácticos y conocimientos para impulsar el tráfico, mejorar el posicionamiento y maximizar la presencia online.

Deja Tu Comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

Ir al Inicio