function ParseTasks()
{
    $sql = "SELECT  ID FROM deploy_tasks WHERE executed=0";
    $q = new mysql();
    $results = $q->QUERY_SQL($sql, "artica_backup");
    while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) {
        events("Running task {$ligne["ID"]}");
        $runed = runtask($ligne["ID"]);
        if (is_file($_GET["logcomputer"])) {
            $logcomputer = @file_get_contents($_GET["logcomputer"]);
        }
        @unlink($_GET["logcomputer"]);
        $logcomputer = addslashes(nl2br(htmlspecialchars($logcomputer)));
        if ($runed) {
            $sql = "UPDATE deploy_tasks SET executed=1, results='{$logcomputer}' WHERE ID={$ligne["ID"]}";
            $q->QUERY_SQL($sql, "artica_backup");
        } else {
            if (is_file($_GET["logcomputer"])) {
                $logcomputer = @file_get_contents($_GET["logcomputer"]);
            }
            $sql = "UPDATE deploy_tasks SET executed=2,results='{$logcomputer}' WHERE ID={$ligne["ID"]}";
            $q->QUERY_SQL($sql, "artica_backup");
        }
        events("Running task {$ligne["ID"]} finish");
    }
}
function ParseTasks()
{
    $sql = "SELECT  ID,computer_id FROM deploy_tasks WHERE executed=0 AND TASK_TYPE='OCS_AGENT'";
    $q = new mysql();
    $results = $q->QUERY_SQL($sql, "artica_backup");
    while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) {
        $uid = $ligne["computer_id"];
        writelogs("Running task {$ligne["ID"]}", __FUNCTION__, __FILE__, __LINE__);
        $sql = "UPDATE deploy_tasks SET executed=1 WHERE ID={$ligne["ID"]}";
        $q->QUERY_SQL($sql, "artica_backup");
        $runed = runtask($uid, $ligne["ID"]);
    }
}
Example #3
0
    `rm -f {$dir}`;
    //如何实现异步多线程
    foreach ($task as $job => $tasks) {
        foreach ($tasks as $url) {
            //进程上限锁
            while (thread_count() > 10) {
                sleep(1);
            }
            $pid = pcntl_fork();
            //父进程和子进程都会执行下面代码
            if ($pid == -1) {
                //错误处理:创建子进程失败时返回-1.
                loger("Could not fork new thread !");
                exit(1);
            } else {
                if ($pid) {
                    //父进程会得到子进程号,所以这里是父进程执行的逻辑
                    pcntl_wait($status, WNOHANG);
                    //等待子进程中断,防止子进程成为僵尸进程。
                } else {
                    //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
                    $return = runtask($url, $proxy);
                    loger($url . "->" . substr($return, 0, strpos($return, "\n")));
                    //子进程完成一定要结束掉进程,否则进程会越来越多
                    exit;
                }
            }
        }
    }
}
exit;