Comando Linux batch

Linux 命令大全Referencia completa de comandos Linux


batch es una herramienta de comandos en el sistema Linux que se utiliza para ejecutar tareas cuando la carga del sistema es baja. Pertenece a la familia de comandos at y está diseñado específicamente para ejecutar automáticamente trabajos por lotes cuando el sistema está inactivo.

A diferencia del comando at, batch no requiere especificar un tiempo de ejecución específico; el sistema decide cuándo ejecutar la tarea según la carga actual. Cuando la carga promedio del sistema es inferior a 0.8 (configurable), batch ejecuta automáticamente las tareas en la cola.


Principio de funcionamiento del comando batch

batch funciona mediante los siguientes mecanismos:

  1. Detección de carga: el sistema monitorea continuamente la carga promedio (load average)
  2. Cola de tareas: coloca las tareas en una cola dedicada (normalmente la cola "batch")
  3. Activación automática: ejecuta las tareas en la cola cuando la carga del sistema está por debajo del umbral
  4. Ejecución secuencial: ejecuta las tareas sucesivamente según el principio FIFO (primero en entrar, primero en salir)

Sintaxis básica

El formato de sintaxis básica del comando batch es:

batch [选项] [时间规格]

Opciones comunes

Opción Descripción
-f 文件 Leer comandos desde un archivo especificado en lugar de la entrada estándar
-m Enviar un correo electrónico al usuario cuando finalice la tarea
-q 队列 Especificar el uso de una cola específica (la cola batch por defecto)
-v Mostrar el tiempo de ejecución de la tarea

Formato de especificación de tiempo

Aunque batch no exige estrictamente parámetros de tiempo, acepta los mismos formatos de tiempo que el comando at:

HH:MM    特定时间(24小时制)
midnight 午夜(00:00)
noon     中午(12:00)
teatime  下午茶时间(16:00)
AM/PM    上午/下午标识
now + 时间  相对时间(如 now + 2 hours)

Ejemplos de uso

Ejemplo 1: Uso básico

  1. Ingrese el comando batch
  2. Ingrese el comando a ejecutar (presione Ctrl+D para finalizar la entrada)

Ejemplo

$ batch
at> echo "This will run when system is idle" >> ~/batch_test.log
at> date >> ~/batch_test.log
at>   # Presione Ctrl+D
job 5 at Thu Mar  2 14:00:00 2023

Ejemplo 2: Leer comandos desde un archivo

Cree un archivo de script de tarea:

Ejemplo

$ cat myscript.sh
#!/bin/bash
echo "Starting backup at $(date)" >> ~/backup.log
tar -czf ~/backup-$(date +%Y%m%d).tar.gz ~/Documents
echo "Backup completed at $(date)" >> ~/backup.log

Envíe la tarea:

Ejemplo

$ batch -f myscript.sh
job 6 at Thu Mar  2 14:05:00 2023

Ejemplo 3: Ver las tareas en la cola

Ejemplo

$ atq
5       Thu Mar  2 14:00:00 2023 a userid batch
6       Thu Mar  2 14:05:00 2023 a userid batch

Ejemplo 4: Eliminar las tareas de la cola

$ atrm 5  # 删除任务ID为5的任务

Configuración avanzada

Modificar el umbral de carga

De forma predeterminada, batch ejecuta tareas cuando la carga promedio del sistema es inferior a 0.8. Este umbral se puede ajustar modificando la configuración del servicio atd:

  1. Edite el archivo de configuración (la ubicación puede variar según la distribución):
sudo nano /etc/atd.conf
  1. Modifique o agregue la siguiente línea:
OPTS="-l 1.5"  # 设置负载阈值为1.5
  1. Reinicie el servicio atd:
sudo systemctl restart atd

Ver la carga promedio del sistema

Ejemplo

$ uptime
 14:10:30 up 2 days,  3:15,  3 users,  load average: 0.45, 0.60, 0.72

Los tres números representan la carga promedio del sistema durante los últimos 1, 5 y 15 minutos, respectivamente.


Notas importantes

  1. Control de permisos: de forma predeterminada, los archivos /etc/at.allow y /etc/at.deny controlan qué usuarios pueden usar el comando batch
  2. Variables de entorno: las tareas batch no heredan todas las variables de entorno del shell actual; si es necesario, deben configurarse explícitamente en el script
  3. Manejo de salida: la salida estándar y los errores de la tarea se envían por correo al usuario de forma predeterminada; se recomienda redirigirlos a un archivo
  4. Tareas de larga duración: batch no es adecuado para tareas de ejecución muy larga; considere usar nohup o tmux
  5. Servicio del sistema: asegúrese de que el servicio atd esté en ejecución (systemctl status atd)

Escenarios de aplicación práctica

  1. Mantenimiento del sistema: realizar tareas de mantenimiento como limpieza de disco y rotación de registros en horas de menor actividad
  2. Tareas intensivas en recursos: trabajos que requieren muchos recursos del sistema, como procesamiento de grandes datos, compilación de proyectos grandes, etc.
  3. Informes programados: generar informes de uso del sistema diarios/semanales
  4. Copias de seguridad automatizadas: realizar operaciones de respaldo cuando el sistema esté inactivo
  5. Trabajos por lotes: procesar múltiples tareas similares en la cola

Comparación con comandos relacionados

Comando Tiempo de ejecución Escenario aplicable Utilización de recursos
at Especificar un tiempo específico Tareas que se ejecutan a una hora exacta No tiene en cuenta la carga del sistema
batch Cuando el sistema está inactivo Tareas de fondo no urgentes Uso inteligente de los recursos inactivos
cron Programación periódica Tareas que se ejecutan periódicamente No tiene en cuenta la carga del sistema
nohup Ejecución inmediata Tareas de larga duración Ocupa recursos continuamente

Preguntas frecuentes

Q1: ¿Cómo ver la salida de una tarea batch?

A: De forma predeterminada, la salida se envía por correo electrónico. También puede redirigirla a un archivo en el comando:

batch < output.log 2>&1
EOF

Q2: ¿Por qué no se ejecutó mi tarea batch?

A: Posibles causas:

  • La carga del sistema se mantiene por encima del umbral
  • El servicio atd no está en ejecución
  • La tarea fue cancelada por el administrador
  • El usuario no tiene permiso para usar batch

Q3: ¿Puede una tarea batch acceder a la interfaz gráfica?

A: No. Las tareas batch se ejecutan en un entorno no interactivo y no pueden acceder a la GUI ni a los dispositivos de visualización.

Q4: ¿Cómo establecer la prioridad de una tarea batch?

A: Puede ajustar la prioridad usando el comando nice:

Ejemplo

batch &lt;&lt;EOF
nice -n 10 command
EOF

Resumen

El comando batch es una poderosa herramienta de procesamiento por lotes en el sistema Linux que puede:

  • Utilizar inteligentemente los recursos inactivos del sistema
  • Ejecutar tareas automáticamente cuando la carga es baja
  • Simplificar la gestión de tareas en segundo plano
  • Mejorar la utilización de los recursos del sistema

Dominar el comando batch puede ayudar a los administradores de sistemas y a los desarrolladores a gestionar los recursos del sistema de manera más eficiente, y es especialmente adecuado para ejecutar tareas de procesamiento en segundo plano no urgentes.


Linux 命令大全Referencia completa de comandos Linux

Otras extensiones