it-swarm.com.de

Funktion mit Linux Cron Job in Wordpress ausführen

Ich weiß, dass WordPress ein Faux-Cron hat, das so heißt, wenn ein Benutzer die Seite besucht.

register_activation_hook(__FILE__, 'my_activation');
add_action('my_hourly_event', 'do_this_hourly');

function my_activation() {
    wp_schedule_event(time(), 'hourly', 'my_hourly_event');
}

function do_this_hourly() {
    // do something every hour
}

Ich möchte Linux Cron wie folgt verwenden:

*/5 * * * * * /usr/local/bin/php/ /Path/to/file

Das Problem ist, dass wenn diese Datei so ist:

<?php 

function do_something() {

  echo 'Hello World';

}

do_something(); 

Do something function wird jedes Mal aufgerufen, wenn ich die Seite neu lade. Was ich brauche, ist eine Möglichkeit, mit Linux Cron anzugeben, so dass do_something () nur aufgerufen wird, wenn es Zeit ist, Cron auszuführen. Die Datei sollte also nur die Funktionsdefinition von do_something () haben, sie sollte die Funktion nicht direkt aufrufen.

<?php 

 function do_something() {

   echo 'Hello World';

 }
1
chap

Ihre Cron-Jobs werden nur ausgeführt, wenn Sie es ihnen mitteilen.

  • 1: Minute (0-59)
  • 2: Stunden (0-23)
  • 3: Tag (0-31)
  • 4: Monat (0-12 [12 == Dezember])
  • 5: Wochentag (0-7 [7 oder 0 == Sonntag])
  • / path/to/command - Zu planender Skript- oder Befehlsname

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Es könnte jedoch möglich sein, den Funktionsnamen an Ihr PHP zu übergeben

1 2 3 4 5 /path/to/command arg1 arg2

Führen Sie dann in Ihrer PHP -Datei die Task nur aus, wenn das Argument mit $_SERVER oder $_GET übergeben wurde.

1
jgraup

Ihnen fehlt eine Schlüsselkomponente.

Fügen Sie dies zu Ihrem wp-config.php hinzu: define( 'DISABLE_WP_CRON', true );

Hier sind einige andere hilfreiche Konstanten für Ihren wp-config.php: https://Gist.github.com/MikeNGarrett/e20d77ca8ba4ae62adf5

1
MikeNGarrett