Estou usando vários sites do Drupal (base de código única, vários sites / *). Junto com isso, comecei a usar aliases Drush para gerenciá-los:
$ cat sites/all/drush/aliases.drushrc.php
<?php
$aliases['localdev'] = array(
'site-list' => array(
'site1',
'site2',
'site3',
),
);
?>
Isso me permite executar ações facilmente em todos os sites:
$ drush @localdev cc all
>> Eu também só descobri que eu posso usar apenas @sites , e renunciar o arquivo drushrc .
Fazendo isso, executará "cc all" em cada um dos meus sites em série (um de cada vez).
Eu gostaria de levar isso para o próximo nível e tentar executar esses comandos em todos os sites de forma simultânea . Eu tenho feito algumas leituras, e estou sob a impressão de que Drush se de fato suportar isto. A função drush_invoke_process () aceita $ backend_options, que pode conter (da documentação da função):
* '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'.
O que não consigo descobrir, no entanto, é como realmente utilizo isso na linha de comando Drush . Existe uma opção que preciso passar para o Drush ou preciso definir algo em um arquivo de configurações?
Qualquer informação será muito apreciada - minha curiosidade é aguçada!
ATUALIZAR
Com base nas respostas abaixo, pude criar um teste simples que demonstra o comportamento de Drush e tirar algumas conclusões:
O comportamento padrão do Drush ao executar operações em vários sites é usar processos simultâneos:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);"
Continue? (y/n): y
site1 >> 1360512943 [status]
site2 >> 1360512943 [status]
site3 >> 1360512943 [status]
Isso acontece mesmo quando não se usa aliases, e também quando se usa o alias incorporado @sites do Drush. Esses dois comandos geram um comportamento idêntico ao descrito acima:
$ drush site1,site2,site3 ev "drupal_set_message(time()); sleep(5);"
$ drush @sites ev "drupal_set_message(time()); sleep(5);"
Para alterar o número de processos simultâneos (o padrão é 4), a opção '--concurrency = N' pode ser passada no comando drush. Por exemplo, se eu quiser execução em série, posso definir o número de processos simultâneos como 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]
fonte
Respostas:
Isso funcionou para mim:
Não tenho certeza de quão simultâneo foi realmente; a última mensagem sobre o site1 veio imediatamente após a primeira mensagem para o site2 e todas as outras mensagens foram impressas sequencialmente. Não medi até que ponto cada operação cc ocorreu simultaneamente ou em que medida o sistema poderia ter sido cpu ou i / o ligado, mas parecia estar funcionando nominalmente.
fonte
@sites
comando No entanto, uma falha é que, se o diretório do site for um link simbólico, o comando não o reconhecerá. no meu caso o link simbólico é uma raiz dir fora drupal tão LS- l dá:site_dir -> ../../sites/site/src
.. Talvez seja bug posso corrigir se você pode me apontar para o código responsável de thelist construçãoPara instância única (sem lista de sites):
Para aliases com o array da lista de sites, ele será executado de forma simultânea ...
Após os comentários abaixo , vamos revisar o código para drush_invoke_process:
//
- meu comentário,/* ... */
- encurtando o código fornecido.Em seguida chamado:
Em seguida será chamado:
fonte