Estoy usando múltiples sitios de Drupal (base de código único, múltiples sitios / *). Junto con esto, comencé a usar alias Drush para administrarlos:
$ cat sites/all/drush/aliases.drushrc.php
<?php
$aliases['localdev'] = array(
'site-list' => array(
'site1',
'site2',
'site3',
),
);
?>
Esto me permite realizar acciones fácilmente en todos los sitios:
$ drush @localdev cc all
>> También acabo de descubrir que puedo usar @sites y renunciar al archivo drushrc .
Al hacer esto, ejecutaré "cc all" en cada uno de mis sitios en serie (uno a la vez).
Me gustaría llevar esto al siguiente nivel e intentar ejecutar estos comandos en todos los sitios de forma simultánea . He estado leyendo, y da la impresión de que Drush no de hecho compatible con esta. La función drush_invoke_process () toma $ backend_options, que puede contener (de la documentación de la función):
* 'invoke-multiple'
* If $site_alias_record represents a single site, then 'invoke-multiple'
* will cause the _same_ command with the _same_ arguments and options
* to be invoked concurrently (e.g. for running concurrent batch processes).
* 'concurrency'
* Limits the number of concurrent processes that will run at the same time.
* Defaults to '4'.
Sin embargo, lo que no puedo entender es cómo puedo usar esto desde la línea de comando Drush . ¿Hay alguna opción que deba pasar a Drush o debo configurar algo en un archivo de configuración?
Cualquier información será muy apreciada, ¡mi curiosidad se despertó!
ACTUALIZAR
Basado en las respuestas a continuación, pude crear una prueba simple que demuestra el comportamiento de Drush, y sacar algunas conclusiones:
El comportamiento predeterminado de Drush al ejecutar operaciones en múltiples sitios es usar procesos concurrentes:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);"
Continue? (y/n): y
site1 >> 1360512943 [status]
site2 >> 1360512943 [status]
site3 >> 1360512943 [status]
Esto es cierto incluso cuando no se usan alias, y también es cierto cuando se usa el alias incorporado @sites de Drush. Estos dos comandos producen un comportamiento idéntico al anterior:
$ drush site1,site2,site3 ev "drupal_set_message(time()); sleep(5);"
$ drush @sites ev "drupal_set_message(time()); sleep(5);"
Para cambiar el número de procesos concurrentes (el valor predeterminado es 4), la opción '--concurrencia = N' se puede pasar en el comando drush. Por ejemplo, si quiero la ejecución en serie, puedo establecer el número de procesos concurrentes en 1:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);" --concurrency=1
Continue? (y/n): y
site1 >> 1360513387 [status]
site2 >> 1360513393 [status]
site3 >> 1360513399 [status]
fuente

Respuestas:
Esto funcionó para mí:
No estoy seguro de lo concurrente que fue en realidad; el último mensaje sobre el sitio1 llegó inmediatamente después del primer mensaje para el sitio2, y todos los demás mensajes se imprimieron secuencialmente. No medí en qué medida cada operación cc ocurrió simultáneamente, o en qué medida el sistema podría haber sido limitado por CPU o E / S, pero parecía estar funcionando nominalmente.
fuente
@sitescomando. Sin embargo, un problema con esto es que si el directorio del sitio es un enlace simbólico, el comando no lo reconoce. en mi caso, el enlace simbólico es a un directorio fuera de la raíz de drupal, así que ls- l da:site_dir -> ../../sites/site/srctal vez es un error que puedo solucionar si me puede señalar el código responsable de construir la listaPara una sola instancia (sin lista de sitios):
Para los alias con la matriz de lista de sitios, se ejecutará de forma concisa incluso ...
Después de los comentarios a continuación , revisemos el código para drush_invoke_process:
//- mi comentario,/* ... */- acortando el código proporcionado.Siguiente llamado:
A continuación se llamará:
fuente