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”이 실행됩니다.
나는 이것을 다음 단계로 옮기고 모든 사이트에서 이러한 명령을 동시에 실행하려고합니다 . 나는 약간의 독서를하고 있으며, 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]
답변
이것은 나를 위해 일했다 :
drush @site1,@site2,@site3,@site4 cc all --concurrency=4
나는 그것이 실제로 얼마나 동시 적인지 확신하지 못한다. site1에 대한 마지막 메시지는 site2에 대한 첫 번째 메시지 바로 뒤에 왔으며 다른 모든 메시지는 순차적으로 인쇄되었습니다. 각 cc 작업이 동시에 어느 정도까지 발생했는지 또는 시스템이 CPU 또는 i / o에 바인딩 된 정도까지 측정하지는 않았지만 명목상 작동하는 것 같습니다.
답변
단일 인스턴스 (사이트 목록 없음) :
<?php
$aliases['localdev'] = array(
'invoke-multiple' => TRUE,
);
?>
사이트 목록 배열이있는 별칭의 경우에도 동시 실행됩니다 …
주석 아래 에 drush_invoke_process에 대한 코드를 검토해 보겠습니다
//
.-내 의견 /* ... */
-제공된 코드 단축.
<?php
function drush_invoke_process($site_alias_record, $command_name, $commandline_args = array(), $commandline_options = array(), $backend_options = TRUE) {
if (is_array($site_alias_record) && array_key_exists('site-list', $site_alias_record)) {
/* $invocations[] - this array filled with command for each site in site-list. */
}
else {
/* aliases not defined or site-list not found. So $invocations filled by one item. */
}
return drush_backend_invoke_concurrent($invocations, $commandline_options, $backend_options);
}
?>
다음에 전화 :
<?php
function drush_backend_invoke_concurrent($invocations, $common_options = array(), $common_backend_options = array(), $default_command = NULL, $default_site = NULL, $context = NULL) {
/* Here building command line happen for each site (invocation). */
return _drush_backend_invoke($cmds, $common_backend_options, $context);
}
?>
다음은 전화했다 :
<?php
function _drush_backend_invoke($cmds, $common_backend_options = array(), $context = NULL) {
/* Some simulating code and fork code */
if (array_key_exists('interactive', $common_backend_options) || array_key_exists('fork', $common_backend_options)) {
/* Direct running (interactive or fork) */
}
else {
// Concurrency set to 4 by default. So --concurency just override it by another value.
$process_limit = drush_get_option_override($common_backend_options, 'concurrency', 4);
// Next is main call, that run commands as concurent processes using proc_open and streaming:
$procs = _drush_backend_proc_open($cmds, $process_limit, $context);
/* Processing of result running of processes. */
}
return empty($ret) ? FALSE : $ret;
}
?>