protected function execute($arguments = array(), $options = array()) { // number of workers $n_childs = $options['processes'] - 1; // Start n child $this->startChildren($n_childs); $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true)); $this->redefineStdOut(); // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); // add your code here // queue of response $this->queueResourceResponse = msg_get_queue(ftok(__FILE__, 'X')); $backup_location = $arguments['location']; if ($this->iAmParent()) { $this->log('[INFO] Get all nodes with VirtAgent activated...' . "\n"); $query = EtvaServerQuery::create(); // filter servers if ($options['filter']) { $fil_arr = explode(',', $options['filter']); foreach ($fil_arr as $sname) { $query->addOr(EtvaServerPeer::NAME, $sname, Criteria::EQUAL); } } // exclude servers if ($options['exclude']) { $exc_arr = explode(',', $options['exclude']); foreach ($exc_arr as $sname) { $query->addAnd(EtvaServerPeer::NAME, $sname, Criteria::NOT_EQUAL); } } $all_servers = $query->find(); foreach ($all_servers as $server) { // add server to queue to process backup $this->addToQueue($server); } // Wait until queue is consume $this->waitForEmptyQueue(); } else { $msgtype_send = 1; // Child process while ($server = $this->getFromQueue()) { $task_server_backup = new serverBackupTask($this->dispatcher, new sfFormatter()); $res = $task_server_backup->run(array('serverid' => $server->getId()), array('location' => $backup_location, 'shutdown' => 'true', 'do_not_generate_tar' => 'true', 'delete_backups_n_days' => 2)); $error = $task_server_backup->getLastError(); $message = $task_server_backup->getReport(); /*$res = 0; $message = "[INFO] Backup ".$server->getName()." VM successfully.\n"; $error = array('message'=>$message); $this->log($message);*/ // send report to the parent $msgObj = array('return' => $res, 'message' => $message, 'error' => $error, 'server' => $server); msg_send($this->queueResourceResponse, $msgtype_send, $msgObj); } } }