С наступающим! :)
Нужно бекапить большое количество объемных баз данных и веб контента, и отправлять это все на другой сервер.
На текущий момент это все делается последовательно:
- делаем дамп первой базы
- пакуем первую базу в архив
- копируем первую базу на другой сервер
- делаем дамп второй базы
- пакуем вторую базу в архив
- копируем вторую базу на другой сервер
...
- пакуем веб контент из одной директории в архив
- пакуем веб контент из второй директории в архив
...
- копируем на другой сервер запакованный веб контент из первой директории
- копируем на другой сервер запакованный веб контент из второй директории
....
Все это занимает много времени и поскольку у сервака достаточно вычислительных ресурсов, хотелось бы сделать многопоточный бекап.
Т.е. делим всю информацию, которую хотим бекапить на объекты. Далее для каждого типа объекта (у меня их два: mysql база и директория) пишу вспомогательный скрипт, который будет его бекапить и переносить куда надо. (тут все просто и вопросов нет)
Еще будет основной скрипт, который должен запускать первый скрипт приминительно к конкретным объектам, которые надо бекапить. НО не последовательно, а параллельно группами. Т.е. допустим у меня 100 баз разного размера, я допускаю возможность бекапа 5 баз одновременно. Соответственно, этот основной скрипт, запускает 5 вспомогательных скриптов, которые бекапят базы и ждет, пока один из них не закончит работу, как закончил он запускает еще один скрипт и т.д., пока все базы не обработает.
Т.е. мне нужна возможность параллельно держать запущенными определенное количество задач, и по мере их выполнении добавлять новые задачи, пока они не закончатся. Надеюсь понятно объяснил.
Собственно вопрос, как скрипт может контролировать количество запущенных им в фоне задач, чтобы по мере их выполнения запускать новые задачи и поддерживая одновременное количество выполняемых задач на определенном уровне?