Cómo pausar y reanudar scripts de shell en Linux: Una guía práctica

Una de las características poderosas de Linux es la capacidad de pausar la ejecución de scripts de shell y reanudarlos más tarde. Esta guía introduce métodos básicos para controlar la ejecución de scripts de shell, explorando maneras de mejorar la eficiencia del trabajo aprovechando estas capacidades. Cubrimos una amplia gama de técnicas, desde el uso de comandos de control de trabajos hasta métodos de pausa dentro de los scripts.

Índice

¿Qué son los scripts de shell?

Los scripts de shell son un tipo de lenguaje de secuencias de comandos utilizado en los sistemas operativos Linux y similares a Unix. Permiten que una serie de comandos se escriban en un archivo y se ejecuten como un único archivo ejecutable. Los scripts de shell habilitan la automatización de tareas complejas y tareas eficientes de administración del sistema. Pueden ejecutarse directamente a través de una interfaz basada en texto o como procesamiento por lotes, y son ampliamente utilizados en varios niveles del sistema.

Los fundamentos de la pausa: Usar Ctrl+Z

El método más básico para pausar un programa que se ejecuta desde un script de shell o línea de comandos es utilizando el atajo de teclado Ctrl+Z. Esta acción pausa el proceso que se ejecuta actualmente en primer plano y le asigna un número de trabajo por el sistema. Un proceso pausado puede moverse al fondo con el comando bg, o reanudarse en primer plano usando el comando fg.

Este método es increíblemente útil para detener temporalmente scripts o programas que tardan mucho en ejecutarse, permitiendo que otras tareas tomen prioridad. También sirve como una medida de emergencia para detener de manera segura programas que podrían producir resultados no deseados. Usar Ctrl+Z para pausar es el primer paso en utilizar las características de control de trabajos de Linux, esenciales para la gestión eficiente del sistema.

Visión general de los comandos de control de trabajos

Linux está equipado con características de control de trabajos que permiten una gestión eficiente de múltiples procesos. Estas características habilitan la ejecución de procesos en el fondo o primer plano, y reanudar procesos pausados. Los comandos clave de control de trabajos incluyen:

  • jobs: Muestra una lista y el estado de los trabajos relacionados con la sesión actual del shell. Puedes ver si un trabajo se está ejecutando en el fondo o ha sido detenido.
  • bg: Reanuda un trabajo detenido (pausado) en el fondo. Si no se especifica un trabajo, se apunta al último trabajo detenido.
  • fg: Reanuda un trabajo en el fondo o detenido en el primer plano. Este comando permite volver a ingresar en el trabajo.
  • kill: Termina un trabajo o proceso. Puedes especificar un número de trabajo o ID de proceso para terminar un trabajo o proceso específico.

Dominar estos comandos permite un control flexible de múltiples procesos en un sistema Linux, especialmente en la gestión de scripts o procesos de larga duración.

Ejecutando en el fondo con el comando bg

El comando bg se utiliza para reanudar un trabajo detenido (pausado) en el fondo. Al usar este comando, un trabajo puede continuar ejecutándose sin requerir entrada del usuario, permitiendo que otro trabajo se realice en primer plano.

Para ejecutar un trabajo en el fondo, primero pausa el trabajo que se ejecuta en primer plano utilizando Ctrl+Z. Luego, puedes reanudarlo en el fondo especificando el número de trabajo después del comando bg. El número de trabajo se puede encontrar utilizando el comando jobs.

Por ejemplo, si la salida del comando jobs fuera como sigue:

[1]+  Detenido                 myscript.sh
[2]   Ejecutando                 another_script.sh &

Para reanudar myscript.sh en el fondo, ejecutarías el siguiente comando:

bg %1

Este comando reanuda myscript.sh, el número de trabajo 1, en el fondo. Dado que los trabajos en el fondo no aceptan entrada del usuario, se recomienda redirigir la salida a un archivo de registro o usar el comando jobs para verificar su estado y salida.

Regresando al primer plano con el comando fg

El comando fg se utiliza para traer un trabajo en el fondo o detenido de vuelta al primer plano y reanudarlo. Utilizar este comando permite que un proceso que se ejecuta en el fondo o está pausado regrese al primer plano para entrada directa del usuario y monitoreo.

Para reanudar un trabajo en el primer plano, primero identifica el número de trabajo verificando el estado actual del trabajo con el comando jobs. Luego, ejecuta el comando fg seguido del número de trabajo. Ten en cuenta que el número de trabajo debe ir precedido de un signo %.

Por ejemplo, si los siguientes trabajos se estuvieran ejecutando en el fondo:

[1]-  Ejecutando                 background_task.sh &
[2]+  Detenido                 paused_script.sh

Para reanudar paused_script.sh (número de trabajo 2) en el primer plano, usa el siguiente comando:

fg %2

Esta operación trae paused_script.sh de vuelta al primer plano para interacción del usuario. El comando fg es especialmente efectivo para procesos que se ejecutan por un período largo o requieren operaciones detalladas bajo supervisión del usuario. Reanudar la ejecución en el primer plano permite el monitoreo del progreso en tiempo real e intervención directa según sea necesario.

Mostrando listas de trabajos con el comando jobs

El comando jobs se utiliza para mostrar una lista y estado de los trabajos relacionados con la sesión actual del shell. Permite a los usuarios ver procesos que se ejecutan en el fondo, aquellos que están pausados (detenidos), y otros estados de los trabajos.

Ejecutar el comando jobs asigna un número de trabajo único a cada trabajo, mostrado junto a su estado (ejecutando, detenido, etc.). Esto facilita especificar qué trabajo controlar usando los comandos bg, fg, o kill.

Por ejemplo, si el resultado de ejecutar el comando jobs se muestra como sigue:

[1]   Ejecutando                 ./long_running_script.sh &
[2]-  Detenido                 ./paused_script.sh
[3]+  Ejecutando                 ./background_task.sh &

A partir de esta salida, puedes decir que el número de trabajo 1 se está ejecutando en el fondo, el número de trabajo 2 está detenido (pausado), y el número de trabajo 3 también se está ejecutando en el fondo. Basado en esta información, puedes elegir traer un trabajo específico al primer plano, reanudarlo o terminarlo.

El comando jobs es una herramienta vital para mejorar la eficiencia del trabajo en Linux, esencial para gestionar y monitorear procesos. Es particularmente útil cuando se ejecutan múltiples tareas simultáneamente o se gestionan scripts de larga duración.

Controlando scripts de shell con el comando kill

El comando kill es una herramienta poderosa para terminar procesos. Permite el control de scripts de shell y cualquier proceso especificando un ID de Proceso (PID) particular o número de trabajo, terminando ese proceso. Este comando es increíblemente útil cuando un programa se vuelve no responde o necesita ser terminado bajo ciertas condiciones.

El uso básico para terminar un proceso implica especificar el PID del proceso que quieres terminar siguiendo el comando kill. El PID se puede encontrar usando comandos como ps o top.

Ejemplo:

kill 12345

Este comando termina el proceso con PID 12345.

Además, el comando kill puede operar en trabajos controlados por el shell usando control de trabajos. Para terminar un trabajo específico usando su número de trabajo, prefija el número de trabajo con un %.

Ejemplo:

kill %1

Este comando termina el proceso con número de trabajo 1.

Además, el comando kill puede enviar señales a un proceso, permitiendo diversos efectos, como la terminación inmediata (SIGKILL o -9) o solicitando la terminación del programa (SIGTERM o -15).

Ejemplo:

kill -9 12345

Este comando fuerza de manera inmediata la terminación del proceso con PID 12345.

El comando kill, siendo muy poderoso, requiere precaución en su uso. Terminar accidentalmente procesos esenciales del sistema puede afectar la estabilidad del sistema.

Pausando dentro de los scripts: El comando sleep

Para pausar temporalmente un proceso dentro de un script de shell, utiliza el comando sleep. Este comando retrasa la ejecución del script por un número especificado de segundos, pausando el proceso durante ese tiempo. El comando sleep es particularmente útil para gestionar tareas dependientes del tiempo dentro de los scripts o introducir un período de espera fijo entre operaciones consecutivas.

El uso básico es sencillo: sigue sleep con el número de segundos que quieres pausar. Por ejemplo, para pausar la ejecución del script durante 5 segundos, escribirías:

sleep 5

Además de segundos, el comando sleep también puede especificar minutos (m), horas (h) y días (d). Por ejemplo, para pausar un proceso por 2 minutos, usarías:

sleep 2m

Al aprovechar el comando sleep, puedes lograr un control más fino sobre la gestión de procesos dentro de los scripts de shell. Por ejemplo, al crear un script para respaldar datos sin sobrecargar el servidor, insertar comandos sleep entre operaciones de respaldo puede ayudar a gestionar el uso de recursos del sistema.

Escenarios prácticos y ejemplos

Aprender cómo pausar y reanudar scripts de shell en Linux puede mejorar significativamente tu eficiencia en el trabajo. Aquí, introducimos escenarios prácticos utilizando el control de trabajos.

Escenario 1: Tareas de larga duración en el fondo

Estás ejecutando un script para procesar una gran cantidad de datos pero también necesitas realizar otras tareas simultáneamente. En este caso, puedes ejecutar el script en el fondo y verificar su estado según sea necesario.

  1. Ejecuta el script en el fondo.
   ./data_processing_script.sh &
  1. Verifica los trabajos en ejecución con el comando jobs.
   jobs
  1. Verifica si el trabajo está completo y, si es necesario, tráelo de vuelta al primer plano.
   fg %1

Escenario 2: Ajustando recursos del sistema

Para gestionar adecuadamente los recursos del sistema mientras se ejecutan múltiples tareas, podrías detener temporalmente un trabajo específico para reducir la carga del sistema.

  1. Pausa la tarea que consideras está causando alta carga.
   kill -STOP %1
  1. Una vez que la carga del sistema disminuye, reanuda la tarea.
   kill -CONT %1

Escenario 3: Automatizando tareas periódicas

Cuando necesitas ejecutar un script en intervalos específicos, utiliza el comando sleep para introducir períodos de espera, automatizando la ejecución del script.

  1. Ejecuta el script y luego espera 5 minutos después de que termine.
   ./routine_task.sh
   sleep 5m
  1. Repite este paso para automatizar tareas periódicas.

Estos escenarios demuestran ejemplos básicos de uso de las características de control de trabajos de Linux y el comando sleep para agilizar las tareas diarias y gestionar eficazmente los recursos del sistema. Dominar estas técnicas permite manejar fácilmente tareas complejas, mejorando la productividad en tu trabajo.

Conclusión

Dominar cómo pausar y reanudar efectivamente scripts de shell en Linux es crucial para aumentar la flexibilidad de tu trabajo y gestionar eficientemente las tareas. Pausar con Ctrl+Z, gestionar procesos en el fondo y primer plano con los comandos bg y fg, mostrar listas de trabajos con jobs, controlar procesos con el comando kill y pausar dentro de los scripts usando sleep son técnicas fundamentales que todo usuario de Linux debería conocer. Al utilizar adecuadamente estos comandos, puedes controlar eficientemente múltiples procesos y tareas, mejorando la productividad en tu trabajo. Aprender a utilizar estas técnicas a través de escenarios prácticos te permite lograr una mayor flexibilidad y eficiencia en tus tareas diarias. Vamos a abrazar estas habilidades para agilizar nuestro trabajo y gestionar tareas más efectivamente en Linux.

Índice