Skip to content

Commit 5de2af2

Browse files
author
mcramer
committed
- Implemented: New cron class and split up cron_daily
- Implemented: FS#3110 - Turn monitoring module into cron jobs
1 parent ec57162 commit 5de2af2

39 files changed

+6453
-3675
lines changed

install/sql/ispconfig3.sql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,22 @@ CREATE TABLE `sys_config` (
14291429
`value` varchar(255) NOT NULL
14301430
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
14311431

1432+
1433+
-- --------------------------------------------------------
1434+
1435+
--
1436+
-- Table structure for table `sys_cron`
1437+
--
1438+
1439+
CREATE TABLE IF NOT EXISTS `sys_cron` (
1440+
`name` varchar(50) NOT NULL,
1441+
`last_run` datetime NULL DEFAULT NULL,
1442+
`next_run` datetime NULL DEFAULT NULL,
1443+
`running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
1444+
PRIMARY KEY (`name`)
1445+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
1446+
1447+
14321448
-- --------------------------------------------------------
14331449

14341450
--

server/cron.php

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
/*
4+
Copyright (c) 2007-2012, Till Brehm, projektfarm Gmbh
5+
All rights reserved.
6+
7+
Redistribution and use in source and binary forms, with or without modification,
8+
are permitted provided that the following conditions are met:
9+
10+
* Redistributions of source code must retain the above copyright notice,
11+
this list of conditions and the following disclaimer.
12+
* Redistributions in binary form must reproduce the above copyright notice,
13+
this list of conditions and the following disclaimer in the documentation
14+
and/or other materials provided with the distribution.
15+
* Neither the name of ISPConfig nor the names of its contributors
16+
may be used to endorse or promote products derived from this software without
17+
specific prior written permission.
18+
19+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22+
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23+
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"]));
32+
require(SCRIPT_PATH."/lib/config.inc.php");
33+
require(SCRIPT_PATH."/lib/app.inc.php");
34+
35+
set_time_limit(0);
36+
ini_set('error_reporting', E_ALL & ~E_NOTICE);
37+
38+
// make sure server_id is always an int
39+
$conf['server_id'] = intval($conf['server_id']);
40+
41+
42+
// Load required base-classes
43+
$app->uses('ini_parser,file,services,getconf,system,cron,functions');
44+
$app->load('libdatetime,cronjob');
45+
46+
47+
// read all cron jobs
48+
$path = SCRIPT_PATH . '/lib/classes/cron.d';
49+
if(!is_dir($path)) die('Cron path missing!');
50+
$files = array();
51+
$d = opendir($path);
52+
while($f = readdir($d)) {
53+
$file_path = $path . '/' . $f;
54+
if($f === '.' || $f === '..' || !is_file($file_path)) continue;
55+
if(substr($f, strrpos($f, '.')) !== '.php') continue;
56+
$files[] = $f;
57+
}
58+
closedir($d);
59+
60+
// sort in alphabetical order, so we can use prefixes like 000-xxx
61+
sort($files);
62+
63+
foreach($files as $f) {
64+
$name = substr($f, 0, strpos($f, '.'));
65+
if(preg_match('/^\d+\-(.*)$/', $name, $match)) $name = $match[1]; // strip numerical prefix from file name
66+
67+
include($path . '/' . $f);
68+
$class_name = 'cronjob_' . $name;
69+
70+
if(class_exists($class_name, false)) {
71+
$cronjob = new $class_name();
72+
if(get_parent_class($cronjob) !== 'cronjob') {
73+
print 'Invalid class ' . $class_name . ' not extending class cronjob (' . get_parent_class($cronjob) . ')!' . "\n";
74+
unset($cronjob);
75+
continue;
76+
}
77+
print 'Included ' . $class_name . ' from ' . $file_path . ' -> will now run job.' . "\n";
78+
79+
$cronjob->run();
80+
81+
print 'run job (' . $class_name . ') done.' . "\n";
82+
83+
unset($cronjob);
84+
}
85+
}
86+
unset($files);
87+
88+
die("finished.\n");
89+
90+
?>

server/cron.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/sh
2+
3+
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
4+
5+
if [ -f /usr/local/ispconfig/server/lib/php.ini ]; then
6+
PHPINIOWNER=`stat -c %U /usr/local/ispconfig/server/lib/php.ini`
7+
if [ $PHPINIOWNER == 'root' ] || [ $PHPINIOWNER == 'ispconfig' ]; then
8+
export PHPRC=/usr/local/ispconfig/server/lib
9+
fi
10+
fi
11+
12+
/usr/bin/php -q /usr/local/ispconfig/server/cron.php

0 commit comments

Comments
 (0)