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
@sites
comando. 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/src
tal 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