Saltar al contenido

Linux / Bash, ¿cómo programar comandos en una cola FIFO?

Solución:

Cola de tareas:

http://vicerveza.homeunix.net/~viric/soft/ts/

https://launchpad.net/ubuntu/+source/task-spooler/0.7.3-1

Hace el truco muy bien. Con suerte, se incluirá en los repositorios de paquetes de Ubuntu.

Usar ;

Por ejemplo:
ls ; touch test ; ls

Eso listará el directorio. Solo después ls ha corrido, se ejecutará touch test que creará un archivo llamado test. Y solo después de que haya terminado, ejecutará el siguiente comando. (En este caso otro ls que mostrará el contenido antiguo y el archivo recién creado).

Los comandos similares son || y &&.

; siempre ejecutará el siguiente comando.

&& solo ejecutará el siguiente comando, el primero devuelto exitosamente.
Ejemplo: rm -rf *.mp3 && echo "Success! All MP3s deleted!"

|| solo ejecutará el siguiente comando si el primer comando devolvió un valor de retorno de error (distinto de cero). Ejemplo: rm -rf *.mp3 || echo "Error! Some files could not be deleted! Check permissions!"

Si desea ejecutar un comando en segundo plano, agregue un ampersand (&).
Ejemplo:
make bzimage &
mp3blaster sound.mp3
make mytestsoftware ; ls ; firefox ; make clean

Ejecutará dos comandos en segundo plano (en este caso, una compilación del kernel que llevará algo de tiempo y un programa para reproducir algo de música). Y en primer plano ejecuta otro trabajo de compilación y, una vez terminado, ls, firefox y make clean (todo secuencialmente)

Para obtener más detalles, consulte man bash


[Edit after comment]

en pseudocódigo, algo como esto?

Program run_queue:

While(true)
{
   Wait_for_a_signal();

   While( queue not empty )
   {
       run next command from the queue.
       remove this command from the queue.
       // If commands where added to the queue during execution then
       // the queue is not empty, keep processing them all.
   }
   // Queue is now empty, returning to wait_for_a_signal
}
// 
// Wait forever on commands and add them to a queue
// Signal run_quueu when something gets added.
//
program add_to_queue()
{
   While(true)
   {
       Wait_for_event();
       Append command to queue
       signal run_queue
   }    
}

La forma más sencilla sería simplemente ejecutar los comandos secuencialmente:

cmd1; cmd2; cmd3; cmdN

Si desea que se ejecute el siguiente comando solamente si el comando anterior salió con éxito, use &&:

cmd1 && cmd2 && cmd3 && cmdN

Esa es la única forma nativa de bash que conozco de hacer lo que quieres. Si necesita control de trabajos (configurar varios trabajos paralelos, etc.), puede intentar instalar un administrador de colas como TORQUE, pero eso parece excesivo si todo lo que desea hacer es lanzar trabajos secuencialmente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *