Comando Linux batch
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:
- Detección de carga: el sistema monitorea continuamente la carga promedio (load average)
- Cola de tareas: coloca las tareas en una cola dedicada (normalmente la cola "batch")
- Activación automática: ejecuta las tareas en la cola cuando la carga del sistema está por debajo del umbral
- 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
- Ingrese el comando batch
- Ingrese el comando a ejecutar (presione Ctrl+D para finalizar la entrada)
Ejemplo
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
#!/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
job 6 at Thu Mar 2 14:05:00 2023
Ejemplo 3: Ver las tareas en la cola
Ejemplo
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:
- Edite el archivo de configuración (la ubicación puede variar según la distribución):
sudo nano /etc/atd.conf
- Modifique o agregue la siguiente línea:
OPTS="-l 1.5" # 设置负载阈值为1.5
- Reinicie el servicio atd:
sudo systemctl restart atd
Ver la carga promedio del sistema
Ejemplo
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
- Control de permisos: de forma predeterminada, los archivos /etc/at.allow y /etc/at.deny controlan qué usuarios pueden usar el comando batch
- 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
- 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
- Tareas de larga duración: batch no es adecuado para tareas de ejecución muy larga; considere usar nohup o tmux
- Servicio del sistema: asegúrese de que el servicio atd esté en ejecución (
systemctl status atd)
Escenarios de aplicación práctica
- Mantenimiento del sistema: realizar tareas de mantenimiento como limpieza de disco y rotación de registros en horas de menor actividad
- Tareas intensivas en recursos: trabajos que requieren muchos recursos del sistema, como procesamiento de grandes datos, compilación de proyectos grandes, etc.
- Informes programados: generar informes de uso del sistema diarios/semanales
- Copias de seguridad automatizadas: realizar operaciones de respaldo cuando el sistema esté inactivo
- 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
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.
Otras extensiones