Linux: ¿Es esta una forma correcta de ejecutar scripts en paralelo?

Quiero actualizar una gran cantidad de proyectos versionados SVN a la vez, usando un script. Lleva mucho time ejecutar trabajos de actualización uno por uno.

Así que traté de ejecutar los trabajos en paralelo. Parece que funciona, sin embargo, no estoy seguro de si se hace correctamente. Tal vez hay problemas de concurrency en los que no pensé?

Por favor, eche un vistazo a la secuencia de commands:

#!/bin/sh time ( for f in `ls -d */` do ( OUTPUT=`svn update $f` echo -e "= = = = = = = = = = $f \n$OUTPUT" ) & done wait ) 

Cuando no almaceno la salida primero, todo se mezcla.

¿Crees que está bien así?

NOTA: La aceleración se debió realmente al factor 20 para 40 proyectos, cuando no hay mucho para actualizar.

Su producción aún se mezclará si dos trabajos se completan al mismo time. Sería mejor escribir la salida en los files y luego cat'ting los files al final de la ejecución:

 #!/bin/sh outdir="/tmp/output$$" # probably ought to be chosen with eg mktemp trap 'rm -rf "$outdir"' EXIT # Clean up on exit, even if Ctrl-C time ( mkdir "$outdir" for f in `ls -d */` # You have issues with filenames with space in, here do ( echo -e "= = = = = = = = = = $f" svn update "$f" ) > "$outdir/$f" & done wait cat "$outdir"/* ) 

Aparte de eso, mi preocupación sería que no estás limitando el número de trabajos que ejecutas explícitamente, pero eso es bastante difícil de lograr en un script de shell. Si confío en que está viendo 40 directorys y no, digamos, 10,000, no creo que sea un problema demasiado grande.

Sí, está bien que la salida se mezcle durante la ejecución paralela a less que se tomen precauciones especiales (como el almacenamiento de la salida en su caso).

La console no espera a que aparezca la salida completa del command. Tenga en count que cuando ejecuta svn update sin nada en paralelo, las líneas se imprimen una a una, ya que Subversion recupera y fusiona los files. Entonces, cuando dos invocaciones svn funcionan al mismo time, cada una de ellas desea imprimir una por una, y la salida es una mezcla de líneas impresas por ellas.

Debería estar bien. ¿Su disco duro se agita mucho al hacer este tipo de actualizaciones simultáneas? Es posible que tenga muchos cambios para actualizar.