X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=update_daemon2.php;h=af29ac18f86e0987f23cc365324cdaadadd63010;hb=e60e4ac08627d467c25eba6e1b62069bc5cfc168;hp=05ccb1356977c1b701b0581886aa28580a6d7a4c;hpb=7440a7fe3c43644cc3a90fe94e7c23795f04eeba;p=tt-rss.git diff --git a/update_daemon2.php b/update_daemon2.php index 05ccb135..af29ac18 100755 --- a/update_daemon2.php +++ b/update_daemon2.php @@ -9,29 +9,34 @@ define('DISABLE_SESSIONS', true); require_once "version.php"; - - if (strpos(VERSION, ".99") !== false || getenv('DAEMON_XDEBUG')) { - define('DAEMON_EXTENDED_DEBUG', true); - } - require_once "autoload.php"; require_once "functions.php"; - require_once "rssfuncs.php"; - require_once "sanity_check.php"; require_once "config.php"; - require_once "db.php"; - require_once "db-prefs.php"; // defaults - define('PURGE_INTERVAL', 3600); // seconds - define('MAX_CHILD_RUNTIME', 600); // seconds - define('MAX_JOBS', 2); - define('SPAWN_INTERVAL', DAEMON_SLEEP_INTERVAL); // seconds + define_default('PURGE_INTERVAL', 3600); // seconds + define_default('MAX_CHILD_RUNTIME', 1800); // seconds + define_default('MAX_JOBS', 2); + define_default('SPAWN_INTERVAL', DAEMON_SLEEP_INTERVAL); // seconds + + require_once "sanity_check.php"; + require_once "db.php"; + require_once "db-prefs.php"; if (!function_exists('pcntl_fork')) { die("error: This script requires PHP compiled with PCNTL module.\n"); } + $options = getopt(""); + + if (!is_array($options)) { + die("error: getopt() failed. ". + "Most probably you are using PHP CGI to run this script ". + "instead of required PHP CLI. Check tt-rss wiki page on updating feeds for ". + "additional information.\n"); + } + + $master_handlers_installed = false; $children = array(); @@ -39,6 +44,9 @@ $last_checkpoint = -1; + /** + * @SuppressWarnings(unused) + */ function reap_children() { global $children; global $ctimes; @@ -79,6 +87,9 @@ } } + /** + * @SuppressWarnings(unused) + */ function sigchld_handler($signal) { $running_jobs = reap_children(); @@ -155,6 +166,10 @@ $spawn_interval = SPAWN_INTERVAL; } + // let's enforce a minimum spawn interval as to not forkbomb the host + $spawn_interval = max(60, $spawn_interval); + _debug("Spawn interval: $spawn_interval sec"); + if (isset($options["log"])) { _debug("Logging to " . $options["log"]); define('LOGFILE', $options["log"]); @@ -173,14 +188,15 @@ "Maybe another daemon is already running.\n"); } - init_plugins(); - $schema_version = get_schema_version(); if ($schema_version != SCHEMA_VERSION) { die("Schema version is wrong, please upgrade the database.\n"); } + // Protip: children close shared database handle when terminating, it's a bad idea to + // do database stuff on main process from now on. + while (true) { // Since sleep is interupted by SIGCHLD, we need another way to @@ -193,17 +209,6 @@ } if ($last_checkpoint + $spawn_interval < time()) { - - /* Check if schema version changed */ - - $test_schema_version = get_schema_version(); - - if ($test_schema_version != $schema_version) { - echo "Expected schema version: $schema_version, got: $test_schema_version\n"; - echo "Schema version changed while we were running, bailing out\n"; - exit(100); - } - check_ctimes(); reap_children(); @@ -216,6 +221,7 @@ if (!$master_handlers_installed) { _debug("[MASTER] installing shutdown handlers"); pcntl_signal(SIGINT, 'sigint_handler'); + pcntl_signal(SIGTERM, 'sigint_handler'); register_shutdown_function('shutdown', posix_getpid()); $master_handlers_installed = true; } @@ -230,10 +236,11 @@ register_shutdown_function('task_shutdown'); $quiet = (isset($options["quiet"])) ? "--quiet" : ""; + $log = function_exists("flock") && isset($options['log']) ? '--log '.$options['log'] : ''; $my_pid = posix_getpid(); - passthru(PHP_EXECUTABLE . " update.php --daemon-loop $quiet --task $j --pidlock $my_pid"); + passthru(PHP_EXECUTABLE . " update.php --daemon-loop $quiet $log --task $j --pidlock $my_pid"); sleep(1);