Cómo establecer un límite de tiempo en los comandos de Linux

Para los administradores de sistemas que son responsables de controlar los servidores Linux, la administración de recursos es una tarea importante de la que deben ocuparse. A veces, los comandos de Linux ocupan una gran parte de los recursos del sistema y deben detenerse.

Afortunadamente, puede limitar el tiempo de ejecución de sus comandos utilizando utilidades como timelimit . En este artículo, discutiremos por qué debería agregar límites de tiempo a sus comandos y cómo agregar una restricción de tiempo usando comandos como timeout y timeout.

¿Por qué limitar el tiempo de ejecución de un comando?

Hay varias razones por las que es posible que deba ejecutar sus comandos con un límite de tiempo. En primer lugar, es posible que esté ejecutando una computadora más antigua o un servidor y no desee que su sistema desperdicie sus recursos en un procesamiento no deseado.

En segundo lugar, las tareas de duración determinada, como las transferencias de archivos, finalizan después de un período determinado, pero sus procesos no se detienen de inmediato. Para evitar que el programa ocupe tiempo de CPU y memoria adicionales, puede agregar un límite que detendrá el proceso una vez que se complete la transferencia.

Agregar límite usando el comando de tiempo de espera

El comando de tiempo de espera es la primera opción de muchos usuarios de Linux para agregar una restricción de tiempo a sus comandos. Dado que esta herramienta es parte del paquete GNU Core Utilities , viene preinstalada en casi todas las distribuciones de Linux.

La sintaxis básica del comando timeout es:

 timeout limit command

… donde límite es la cantidad de tiempo que debe ejecutarse el comando y el comando es el comando de Linux que desea ejecutar con un límite de tiempo.

Por ejemplo, si desea obtener detalles del proceso utilizando el comando superior durante 10 segundos:

 timeout 10s top

El comando superior es interminable y debe salir manualmente usando Ctrl + C. El comando antes mencionado se ejecutará en la parte superior durante 10 segundos y una vez que se acabe el temporizador, el tiempo de espera detendrá su ejecución. Tenga en cuenta que el tiempo de espera toma segundos como unidad de tiempo predeterminada, lo que significa que 10 y 10 son lo mismo.

También puede utilizar m, h, y d para los minutos, las horas y días respectivamente.

Enviar señales de desactivación manualmente con tiempo de espera

De forma predeterminada, el comando de tiempo de espera envía SIGTERM como señal de interrupción. SIGTERM son las siglas de Signal Terminate, que finaliza el proceso de inmediato.

También puede enviar otras señales usando la bandera -s . Por ejemplo, para enviar la señal SIGKILL:

 timeout -s SIGKILL 10 top

También es posible especificar la señal con su número de señal. El siguiente comando también envía la señal SIGKILL al comando superior.

 timeout -s 9 10 top

… donde 9 es el número de señal para SIGKILL.

Para obtener una lista de todas las señales disponibles:

 kill -l

Algunos comandos no se detienen por completo incluso después de agregar un límite de tiempo. En tales situaciones, agregar una señal de interrupción con el comando de tiempo de espera predeterminado soluciona el problema.

 timeout -k 15 10 top

El comando antes mencionado primero ejecutará el comando superior durante 10 segundos, y si el comando no se detiene, enviará una señal de interrupción al proceso después de 15 segundos.

Más información: Cómo eliminar programas que no responden en Linux

Restringir el tiempo de ejecución del comando con timelimit

A diferencia del comando timeout, timelimit no es uno de los paquetes estándar que vienen preinstalados en las distribuciones de Linux. Por lo tanto, tendrá que instalar timelimit manualmente en su sistema.

Para instalar en distribuciones basadas en Debian:

 sudo apt install timelimit

Timelimit no está disponible en los repositorios oficiales de Arch. Pero puedes instalarlo usando un administrador de paquetes AUR como yay .

 sudo yay -S timelimit

Relacionado Cómo instalar paquetes en Arch Linux

Para instalar en Fedora:

 sudo dnf install timelimit

En RHEL y CentOS:

 sudo yum install timelimit

Alternativamente, si aún no puede instalar el paquete en su sistema, descargue el código fuente del sitio web oficial e instálelo manualmente.

Descargar : timelimit

Para ejecutar el comando superior durante 10 segundos usando timelimit:

 timelimit -t10 top

Timelimit toma múltiples argumentos como warntime , warnsig , killtime y killsig . Si el usuario no proporciona estos argumentos, se toman sus valores predeterminados, que son warntime = 3600 segundos, warnsig = 15 , killtime = 120 y killsig = 9 .

Administrar la vida de un comando en Linux

Monitorear los comandos y tomar el control de los procesos se vuelve importante si su máquina Linux tiene recursos limitados. Las utilidades como el tiempo de espera y el límite de tiempo son un salvavidas, ya que le permiten agregar restricciones de tiempo a sus comandos.

Al igual que el tiempo de ejecución de los comandos, también puede restringir el tiempo de pantalla de su sistema. Si usted es un padre que no quiere que su hijo pierda tiempo innecesario frente a una computadora, limitar el tiempo de pantalla es la opción más adecuada.