Beispiel #1
0
function runcron($cronid = 0)
{
    global $_SGLOBAL, $_SCONFIG, $_SBLOCK, $_TPL, $_SCOOKIE, $_SN, $space;
    $where = $cronid ? "cronid='{$cronid}'" : "available>'0' AND nextrun<='{$_SGLOBAL['timestamp']}'";
    $query = $_SGLOBAL['db']->query("SELECT * FROM " . tname('cron') . " WHERE {$where} ORDER BY nextrun LIMIT 1");
    //只运行一个
    if ($cron = $_SGLOBAL['db']->fetch_array($query)) {
        $lockfile = S_ROOT . './data/runcron_' . $cron['cronid'] . '.lock';
        $cronfile = S_ROOT . './source/cron/' . $cron['filename'];
        if (is_writable($lockfile)) {
            $locktime = filemtime($lockfile);
            if ($locktime > $_SGLOBAL['timestamp'] - 600) {
                //10分钟
                return NULL;
            }
        } else {
            @touch($lockfile);
        }
        @set_time_limit(1000);
        @ignore_user_abort(TRUE);
        cronnextrun($cron);
        if (!@(include $cronfile)) {
            runlog('CRON', $cron['name'] . ' : Cron script(' . $cron['filename'] . ') not found or syntax error', 0);
        }
        @unlink($lockfile);
    }
    //更新config
    cron_config();
}
Beispiel #2
0
    }
    //重新计算下次执行时间
    cronnextrun($setarr);
    //更新config
    cron_config();
    cpmessage('do_success', 'admincp.php?ac=cron');
}
if ($_GET['op'] == 'edit') {
    $query = $_SGLOBAL['db']->query("SELECT * FROM " . tname('cron') . " WHERE cronid='{$cronid}'");
    $thevalue = $_SGLOBAL['db']->fetch_array($query);
} elseif ($_GET['op'] == 'add') {
    $thevalue = array('week' => '-1', 'hour' => '-1', 'day' => '-1', 'minute' => '0', 'available' => 1);
} elseif ($_GET['op'] == 'delete') {
    $_SGLOBAL['db']->query("DELETE FROM " . tname('cron') . " WHERE cronid='{$cronid}' AND type='user'");
    //更新缓存
    cron_config();
    cpmessage('do_success', 'admincp.php?ac=cron');
} elseif ($_GET['op'] == 'run') {
    runcron($cronid);
    cpmessage('do_success', 'admincp.php?ac=cron');
} else {
    //列表
    $query = $_SGLOBAL['db']->query("SELECT * FROM " . tname('cron') . " ORDER BY type DESC");
    while ($cron = $_SGLOBAL['db']->fetch_array($query)) {
        foreach (array('weekday', 'day', 'hour', 'minute') as $key) {
            if (in_array($cron[$key], array(-1, ''))) {
                $cron[$key] = '*';
            } elseif ($key == 'weekday') {
                $cron[$key] = 1 + $cron[$key];
            } elseif ($key == 'minute') {
                foreach ($cron[$key] = explode("\t", $cron[$key]) as $k => $v) {