我正在使用Drupal多站点(单个代码库,多个站点/ *)。与此同时,我已经开始使用Drush别名来管理它们:
$ cat sites/all/drush/aliases.drushrc.php
<?php
$aliases['localdev'] = array(
'site-list' => array(
'site1',
'site2',
'site3',
),
);
?>
这使我可以轻松地在所有站点上执行操作:
$ drush @localdev cc all
>> 我还发现我可以只使用@sites,而放弃drushrc文件。
这样做,将在我的每个系列站点(一次一个)中执行“ cc all”。
我想借此到一个新的水平,并尝试在所有网站上运行这些命令simulantiously。我一直在做一些阅读,和上午的印象是Drush 不 确实支持这一点。该drush_invoke_process()函数需要$ backend_options,它可以包含(从函数文档):
* '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'.
但是,我不知道是如何从Drush命令行实际使用它。是否需要传递给Drush的选项,还是需要在设置文件中进行设置?
任何信息将不胜感激-我的好奇心激起!
更新
根据以下答案,我能够创建一个简单的测试来演示Drush的行为,并得出一些结论:
在多个站点上执行操作时,Drush的默认行为是使用并发进程:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);"
Continue? (y/n): y
site1 >> 1360512943 [status]
site2 >> 1360512943 [status]
site3 >> 1360512943 [status]
即使不使用别名也是如此,而在使用Drush的内置@sites别名时也是如此。这两个命令产生与上述相同的行为:
$ drush site1,site2,site3 ev "drupal_set_message(time()); sleep(5);"
$ drush @sites ev "drupal_set_message(time()); sleep(5);"
要更改并发进程数(默认为4),可以在drush命令中传递'--concurrency = N'选项。例如,如果要串行执行,可以将并发进程数设置为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]