Cron

Některé moduly vyžadují službu cron. Zvolte si proto jednu z následujících možností:

Vestavěný Cron

Je spouštěn na základě návštěv uživatelů webu. V admin/config/system/cron (Konfigurace, Cron) je možné nastavit pravidelnost opakování.

Vestavěný cron je vhodné "vypnout" (zrychlí se tak první načtení stránky) a nastavit cron jiným způsobem (webhosting, server atd.). enlightened

Další rozšíření:

  • Ultimate Cron – umožňuje např. nastavit rozdílné časy kontroly aktualizace a odesílání newsletteru enlightened
  • Elysia Cron

Webhosting

Většina poskytovatelů nabízí zapnutí služby cron v administraci webhostingu. Po nastavení této služby vypněte spouštění vestavěného cronu v konfiguraci Drupalu.

Poormanscron

Použijte modul Drupalu s názvem Poormanscron.

WebCron

Zaregistrujte se na stránkách www.webcron.org a vytvořte si novou úlohu pro Váš web.

Server

Spouštění každých 30 minut

Do souboru /etc/crontab vložte (YOURKEY je možné zjistit v admin/reports/status (Logy, Hlášení stavu)

0,30 * * * * root /usr/bin/wget -O - -q http://example.com/cron.php?cron_key=YOURKEY

Spouštění každou hodinu

Do souboru /etc/crontab vložte

0 * * * * root /usr/bin/wget -O - -q http://example.com/cron.php?cron_key=YOURKEY

Jiný způsob:

  1. Pro spouštění skriptu cron.php jednou za hodinu vytvořte v /etc/cron.hourly soubor s názvem např. script a oprávněním:
    Oprávnění souboru script
      Čtení Zápis Spouštění
    Vlastník Ano Ano Ano
    Skupina Ano Ne Ano
    Ostatni Ano Ne Ano
  2. Do souboru vložte níže uvedené řádky a upravte adresu Vašeho webu:
    #!/bin/sh
    /usr/bin/wget -O - -q http://example.com/cron.php?cron_key=YOURKEY

    Pokud máte přístup k serveru omezen pouze na některé IP adresy, je vhodné příkazu wget nařídit použití lokálního rozhraní:

    #!/bin/sh
    /usr/bin/wget -O - -q --bind-address=127.0.0.1
     http://example.com/cron.php?cron_key=YOURKEY

PHP

Jednoduché řešení

  1. Pro spouštění cronu pomocí PHP vytvořte soubor např. cron_custom.php s oprávněním:
    Oprávnění souboru cron_custom.php
      Čtení Zápis Spouštění
    Vlastník Ano Ano Ano
    Skupina Ne Ne Ne
    Ostatni Ne Ne Ne
  2. Do souboru vložte níže uvedené řádky:
  3. <?php
      require('http://example.com/cron.php?cron_key=YOURKEY');
    ?>

    nebo (záleží na webhostingu)

    <?php
      file_get_contents('http://example.com/cron.php?cron_key=YOURKEY');
    ?>

Řešení bez omezení doby běhu skriptu (max_execution_time)

Bližší info viz Drupal 7: Running cron from the command line.

  1. V adresáři sites/ vytvořte dva soubory:
    • localcron.php
    • #!/usr/bin/env /usr/php53/bin/php
      <?php
      // Checks that the arguments are supplied, if not display help information.
      if (in_array($argv, array('--help')) || $argc != 5) {
      ?>
      
      <?php
      } else {
        // Loop through arguments and extract the cron key and drupal root path.
        for ($i = 1; $i < $argc; $i++) {
          switch ($argv[$i]) {
            case '--key':
              $i++;
              $key = $argv[$i];
              break;
            case '--root':
              $i++;
              $path = $argv[$i];
              break;
          }
        }
       
        chdir($path);
        // Sets script name
        $_SERVER['SCRIPT_NAME'] = $argv[0];
       
        // Values as copied from drupal.sh
        $_SERVER['HTTP_HOST'] = 'default';
        $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
        $_SERVER['SERVER_SOFTWARE'] = NULL;
        $_SERVER['REQUEST_METHOD'] = 'GET';
        $_SERVER['QUERY_STRING'] = '';
        $_SERVER['HTTP_USER_AGENT'] = 'console';
       
        // Set cron key get variable to use below code with as
        // little modification as possible.
        $_GET['cron_key'] = $key;
        define('DRUPAL_ROOT', $path);
       
        // Code below is almost verbatim from cron.php, just the messages for
        // watchdog have been changed to indicate that the problem originated from
        // this script.
        include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
        drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
       
        if (!isset($_GET['cron_key']) || variable_get('cron_key', 'drupal') != $_GET['cron_key']) {
          watchdog('cron', "Cron could not run via $argv[0] because an invalid key was used.", array(), WATCHDOG_NOTICE);
          drupal_access_denied();
        } elseif (variable_get('maintenance_mode', 0)) {
          watchdog('cron', "Cron could not run via $argv[0] because the site is in maintenance mode.", array(), WATCHDOG_NOTICE);
          drupal_access_denied();
        } else {
          drupal_cron_run();
        }
      }
      
    • localcrontab.php (upravte zvýrazněné části: umístění souboru, klíč a umístění webu)
    • <?php
      shell_exec("/usr/php53/bin/php /data/web/hosting.com/sub/website.com/sites/localcron.php --key IFEVzAgi8f93LzbHIH8Tz_teLnU7qF456OZRabpxAMg --root '/data/web/hosting.com/sub/website.com/' ");
  2. Nastavte cron na pravidelné spouštění souboru localcrontab.php

Windows

Configuring cron jobs on Windows