Linux - Cronjobs: Unterschied zwischen den Versionen
| (18 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte. | Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte. | ||
| − | Anzeigen kann man die Liste der Cronjobs mit dem Befehl: | + | Anzeigen kann man die Liste der Cronjobs, des aktuellen Benutzers, mit dem Befehl: |
crontab -l | crontab -l | ||
| + | |||
| + | Alle Cronjobs aller Benutzer anzeigen geht mit einem Trick: | ||
| + | for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; | ||
| + | done | ||
Editieren kann man die Liste mit: | Editieren kann man die Liste mit: | ||
| Zeile 63: | Zeile 67: | ||
== Cronjobs auf all-inkl Server == | == Cronjobs auf all-inkl Server == | ||
| − | Manche Provider erlauben keinen direkten Zugriff auf Crontab. All-inkl | + | https://all-inkl.com/wichtig/anleitungen/kas/tools/cronjobs/einrichtung_479.html |
| + | https://all-inkl.com/wichtig/anleitungen/skripte/sonstiges/per-script/shellscripte-ausfuehren_304.html | ||
| + | https://www.php.net/manual/de/function.exec.php | ||
| + | |||
| + | Manche Provider erlauben keinen direkten Zugriff auf Crontab. Bei All-inkl kann man seit Mitte 2010 php Skripte zeitgesteuerte Ausführen. Mit dem exec Befehl kann man auch bestimmte Shell Befehle absetzen. | ||
| + | Tools -> Cronjobs -> Cronjobs | ||
| + | Neuen Cronjob anlegen und dann die auszuführende Datei angeben (vollständige url) | ||
| + | |||
| + | === Quickstart === | ||
| + | Hinweise: | ||
| + | * einige Shell-Befehle sind aus Sicherheitsgründen gesperrt. | ||
| + | * Es ist möglich, dass größere Skripte abbrechen, da diese ggf. an Serverrestriktionen stoßen. | ||
| + | |||
| + | Legen Sie eine Datei mit einem beliebigen Namen an, z.b. cgi-bruecke.php. | ||
| + | |||
| + | <syntaxhighlight lang="php"> | ||
| + | <?php | ||
| + | exec("/bin/bash Pfad zum Script 2>&1", $out, $result); | ||
| + | echo "Returncode: " .$result ."<br>"; | ||
| + | echo "Ausgabe des Scripts: " ."<br>"; | ||
| + | echo "<pre>"; | ||
| + | print_r($out); | ||
| + | echo "</pre>"; | ||
| + | ?> | ||
| + | </php> | ||
| + | </syntaxhighlight> | ||
| + | Den Pfad bekommt man am einfachsten über das kas unter Domain. | ||
| + | |||
| + | Der Aufruf erfolgt dann über die Domain: | ||
| + | https://www.IhreDomain.de/cgi-bruecke.php | ||
| + | |||
| + | Das Skript kann über Perl | ||
| + | exec("/usr/bin/perl Pfad zum Script 2>&1", $out, $result); | ||
| + | |||
| + | Python | ||
| + | exec("/usr/bin/python Pfad zum Script 2>&1", $out, $result); | ||
| + | |||
| + | PHP | ||
| + | exec("/usr/bin/php Pfad zum Script 2>&1", $out, $result); | ||
| + | |||
| + | verwendet werden. | ||
| + | |||
| + | Soweit in Ihrem Tarif enthalten, können Sie dieses Skript auch als Cronjob einrichten: | ||
| + | |||
| + | === Geschütztes cron Verzeichnis === | ||
| + | Die Skripte kann man z.B. in ein Webverzeichnis cron/ legen, und dieses dann über .htaccess schützen. | ||
| + | === Endung phpx (obsolete) === | ||
| + | Skripte benennt man mit der Endung phpx das umgeht (ungetestet) die Zeitbeschränkung von php. Eventuell kann auch das Ausführen über exec das Timeout Problem umgehen. | ||
| + | |||
| + | Update: Stand 2020 kein phpx mehr verwenden. | ||
| + | |||
| + | === Aufruf über exec === | ||
| + | Der php Interpreter kann auch direkt über das exec Kommando aufgerufen werden. Siehe Typo3 Beispiel. | ||
| + | |||
| + | === Kontroll E-Mail === | ||
| + | Ausgaben des Skriptes werden in eine Mail geschrieben, wenn eine Kontroll-Adresse angegeben ist. | ||
| + | |||
| + | == Beispiele == | ||
| + | === Matamo auf all-inkl === | ||
| + | Siehe auch | ||
| + | [[Matamo - Website Analytics]] | ||
| + | * Subdomain (oder Domain) für Matamo z.B.: matamo.myDomain.de einrichten. Daten auf Unterordner | ||
| + | * Subdomain für Cronjob z.B.: cron.matamo.myDomain.de einrichten Daten auf Unterordner (gleicher Account oder Subaccount). | ||
| + | ** Mit Passwort schützen | ||
| + | * Verzeichnis logs oberhalb der Webordner. | ||
| + | |||
| + | gefordert ist der Cronjob | ||
| + | MAILTO="youremail@example.com" | ||
| + | 5 * * * * www-data /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /home/example/matomo-archive.log | ||
| + | |||
| + | Cronjob z.B. cron.matamo.myDomain.de/matamo-archieve.php | ||
| + | |||
| + | <syntaxhighlight lang="php"> | ||
| + | <?php | ||
| + | exec("/usr/bin/php /www/htdocs/[account-siehe-kas]/[matamo.mydomain.de]/console core:archive --url=https://[matamo.webmynet.de]/matamo/ > /www/htdocs/[account-siehe-kas]/logs/matamo-archive.log",$ausgabe,$rueckgabe); | ||
| + | if($rueckgabe === FALSE) { | ||
| + | echo "<p>Der Archivierungsprozess wurde <strong>NICHT</strong> ausgeführt!</p>";} | ||
| + | else if ($rueckgabe == 0) { | ||
| + | echo "<p>Der Archivierungsprozess wurde <strong>ERFOLGREICH</strong> ausgeführt!</p>";} | ||
| + | |||
| + | echo "<p>Rückgabewert: ".$rueckgabe."</p>"; | ||
| + | echo "<p>Ausgabe:</p>"; | ||
| + | echo "<pre>"; | ||
| + | print_r($ausgabe); | ||
| + | echo "</pre>"; | ||
| + | ?> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | === Wetzel Cronjob (php-skript)=== | ||
| + | wetzel-motors.de/fileadmin/mobilede/cron/cron.php | ||
| + | <syntaxhighlight lang="php"> | ||
| + | <!DOCTYPE HTML> | ||
| + | <html> | ||
| + | <head> | ||
| + | <title>Mobile.de Read Vehicles</title> | ||
| + | <meta charset="UTF-8"> | ||
| + | </head> | ||
| + | <body> | ||
| + | <?php | ||
| + | require_once('../config.php'); | ||
| + | require_once('class.mobiledehandler.php'); | ||
| + | |||
| + | echo('<pre>'); | ||
| + | |||
| + | $mobiledehandler = new MobiledeHandler($conf); | ||
| + | |||
| + | // get xml list | ||
| + | $mobiledehandler->read_ad_keys(); | ||
| + | if($adKeys = $mobiledehandler->get_ad_keys()){ | ||
| + | echo("Reading ad keys - OK\n"); | ||
| + | //print_r($adKeys); | ||
| + | }else{ | ||
| + | echo("Reading ad keys - Failed\n"); | ||
| + | exit(); | ||
| + | } | ||
| + | |||
| + | // store vehicles | ||
| + | if($mobiledehandler->store_ads($adKeys)){ | ||
| + | echo("Storing ads in database - OK\n"); | ||
| + | }else{ | ||
| + | echo("Storing ads in database - Failed\n"); | ||
| + | exit(); | ||
| + | } | ||
| + | |||
| + | echo('</pre>'); | ||
| + | ?> | ||
| + | </body> | ||
| + | </html> | ||
| + | |||
| − | |||
| + | </syntaxhighlight> | ||
=== Beispiel: Cronjob für Direct Mail Versand in Typo3 auf all-inkl Server === | === Beispiel: Cronjob für Direct Mail Versand in Typo3 auf all-inkl Server === | ||
| + | Wenn PHP so konfiguriert ist, daß man das exec (oder auch einige andere) Kommandos ausführen kann, so ist es möglich dennoch Cronjobs auszuführen. Auch das Anfahren des Command Line Interface in Typo3 ist darüber möglich. | ||
Eine Anfrage bei all-inkl ergab folgendes: | Eine Anfrage bei all-inkl ergab folgendes: | ||
| Zeile 86: | Zeile 219: | ||
<Zitat Ende> | <Zitat Ende> | ||
| − | Die Server sind scheinbar so konfiguriert, daß ein Skript mit der Endung phpx direkt über den | + | Den absoluten Pfad zum Skript bekommt man über die Funktion phpinfo. |
| + | |||
| + | |||
| + | === Beispiel mit Geschützter phpx Datei === | ||
| + | Man sollte das Skript evtl. vor dem Zugriff von außen schützen. Dazu kann man ein Verzeichnis (z.B. cron) anlegen und dies über htaccess (oder direkt im all-inkl kas mit Passwort schützen) | ||
| + | |||
| + | |||
| + | Die Server sind scheinbar so konfiguriert, daß ein Skript mit der Endung phpx direkt über den statischen php-interpreter ausgeführt wird. Damit sollten auch Timeout Probleme kein Problem darstellen. | ||
| + | |||
| + | == Cronjobs auf dem Mac == | ||
| + | http://www.apfelwiki.de/Main/CRON | ||
| + | Seit Mac OS X 10.4 werden die periodic-Skripte nicht mehr über cron, sondern mittels launchd ausgeführt. | ||
| + | http://www.apfelwiki.de/Main/Launchd | ||
Aktuelle Version vom 1. September 2020, 11:13 Uhr
Links[Bearbeiten]
http://www.debian-administration.org/articles/56
Cronjobs / Crontab[Bearbeiten]
Cronjobs sind Aufgaben, die regelmäßig zu einer bestimmten Zeit ausgeführt werden. Das können z.B. Serverstatistiken sein, die man jede Nacht generieren möchte.
Anzeigen kann man die Liste der Cronjobs, des aktuellen Benutzers, mit dem Befehl:
crontab -l
Alle Cronjobs aller Benutzer anzeigen geht mit einem Trick:
for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done
Editieren kann man die Liste mit:
crontab -e
Nun wird die Liste der Cronjobs mit dem Standardeditor (in der Regel vim) geöffnet.
Hier stehen nun Zeilen dirn, die in etwa, wie die folgende aussehen:
0 */6 * * * /usr/local/confixx/runwebalizer.sh 2>/dev/null >/dev/null 0 20 * * * /srv/scripts/backup.sh 2>&1 | /usr/global/bin/cmail -s "Mail-Subject" mail@admin.de 1 3 * * * /srv/scripts/backup.sh
Die ersten 5 Stellen sind Zahlen, die durch Leerzeichen, oder Tabs getrennt werden dürfen. Dabei stehen die Zahlen der Reihenfolge nach für:
Die Minute zu der das Script ausgeführt werden soll (0-59),
Die Stunde (0-23),
Den Tag (1-31),
Den Monat (1-12),
Den Wochentag (0-6 wobei 0=Sonntag).
Ein * steht jeweils für 'jeden'.
1 3 * * *
würde also bedeuten: Jeden Tag um 3.01 Uhr
*/6
bedeutet: "Wenn die Zahl durch 6 teilbar ist", also alle 6 Stunden/Minute, ...
0 */6 * * *
würde bedeuten jede 6 Stunden und 0 Minuten, also jeden Tag um 0.00, um 6.00, um 12.00 und um 18.00.
Man kann mehrere Zahlen auch durch Komata trennen:
7 1,2,5 * * * würde jeden Tag um 1:07, um 2:07 und um 5:07 ausgeführt werden.
Auch - (bis) ist Möglich
0 0 * * 1-5 würde jeden Wochentag um 0.00 ausgeführt werden.
Nach dieser Zeitangabe folgt das Komando, dass zu den zuvor festgelegten Zeiten ausgeführt werden soll. z.B.: Das Script /srv/scripts/backup.sh aufrufen, welches z.B. wichtige Dateien sichert.
Quelle: http://www.orgapage.net/pages/server/linux/cronjobs.php (1.10.2009)
Cronjobs auf all-inkl Server[Bearbeiten]
https://all-inkl.com/wichtig/anleitungen/kas/tools/cronjobs/einrichtung_479.html https://all-inkl.com/wichtig/anleitungen/skripte/sonstiges/per-script/shellscripte-ausfuehren_304.html https://www.php.net/manual/de/function.exec.php
Manche Provider erlauben keinen direkten Zugriff auf Crontab. Bei All-inkl kann man seit Mitte 2010 php Skripte zeitgesteuerte Ausführen. Mit dem exec Befehl kann man auch bestimmte Shell Befehle absetzen.
Tools -> Cronjobs -> Cronjobs
Neuen Cronjob anlegen und dann die auszuführende Datei angeben (vollständige url)
Quickstart[Bearbeiten]
Hinweise:
- einige Shell-Befehle sind aus Sicherheitsgründen gesperrt.
- Es ist möglich, dass größere Skripte abbrechen, da diese ggf. an Serverrestriktionen stoßen.
Legen Sie eine Datei mit einem beliebigen Namen an, z.b. cgi-bruecke.php.
<?php
exec("/bin/bash Pfad zum Script 2>&1", $out, $result);
echo "Returncode: " .$result ."<br>";
echo "Ausgabe des Scripts: " ."<br>";
echo "<pre>";
print_r($out);
echo "</pre>";
?>
</php>
Den Pfad bekommt man am einfachsten über das kas unter Domain.
Der Aufruf erfolgt dann über die Domain:
https://www.IhreDomain.de/cgi-bruecke.php
Das Skript kann über Perl
exec("/usr/bin/perl Pfad zum Script 2>&1", $out, $result);
Python
exec("/usr/bin/python Pfad zum Script 2>&1", $out, $result);
PHP
exec("/usr/bin/php Pfad zum Script 2>&1", $out, $result);
verwendet werden.
Soweit in Ihrem Tarif enthalten, können Sie dieses Skript auch als Cronjob einrichten:
Geschütztes cron Verzeichnis[Bearbeiten]
Die Skripte kann man z.B. in ein Webverzeichnis cron/ legen, und dieses dann über .htaccess schützen.
Endung phpx (obsolete)[Bearbeiten]
Skripte benennt man mit der Endung phpx das umgeht (ungetestet) die Zeitbeschränkung von php. Eventuell kann auch das Ausführen über exec das Timeout Problem umgehen.
Update: Stand 2020 kein phpx mehr verwenden.
Aufruf über exec[Bearbeiten]
Der php Interpreter kann auch direkt über das exec Kommando aufgerufen werden. Siehe Typo3 Beispiel.
Kontroll E-Mail[Bearbeiten]
Ausgaben des Skriptes werden in eine Mail geschrieben, wenn eine Kontroll-Adresse angegeben ist.
Beispiele[Bearbeiten]
Matamo auf all-inkl[Bearbeiten]
Siehe auch
Matamo - Website Analytics
- Subdomain (oder Domain) für Matamo z.B.: matamo.myDomain.de einrichten. Daten auf Unterordner
- Subdomain für Cronjob z.B.: cron.matamo.myDomain.de einrichten Daten auf Unterordner (gleicher Account oder Subaccount).
- Mit Passwort schützen
- Verzeichnis logs oberhalb der Webordner.
gefordert ist der Cronjob
MAILTO="youremail@example.com" 5 * * * * www-data /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /home/example/matomo-archive.log
Cronjob z.B. cron.matamo.myDomain.de/matamo-archieve.php
<?php
exec("/usr/bin/php /www/htdocs/[account-siehe-kas]/[matamo.mydomain.de]/console core:archive --url=https://[matamo.webmynet.de]/matamo/ > /www/htdocs/[account-siehe-kas]/logs/matamo-archive.log",$ausgabe,$rueckgabe);
if($rueckgabe === FALSE) {
echo "<p>Der Archivierungsprozess wurde <strong>NICHT</strong> ausgeführt!</p>";}
else if ($rueckgabe == 0) {
echo "<p>Der Archivierungsprozess wurde <strong>ERFOLGREICH</strong> ausgeführt!</p>";}
echo "<p>Rückgabewert: ".$rueckgabe."</p>";
echo "<p>Ausgabe:</p>";
echo "<pre>";
print_r($ausgabe);
echo "</pre>";
?>
Wetzel Cronjob (php-skript)[Bearbeiten]
wetzel-motors.de/fileadmin/mobilede/cron/cron.php
<!DOCTYPE HTML>
<html>
<head>
<title>Mobile.de Read Vehicles</title>
<meta charset="UTF-8">
</head>
<body>
<?php
require_once('../config.php');
require_once('class.mobiledehandler.php');
echo('<pre>');
$mobiledehandler = new MobiledeHandler($conf);
// get xml list
$mobiledehandler->read_ad_keys();
if($adKeys = $mobiledehandler->get_ad_keys()){
echo("Reading ad keys - OK\n");
//print_r($adKeys);
}else{
echo("Reading ad keys - Failed\n");
exit();
}
// store vehicles
if($mobiledehandler->store_ads($adKeys)){
echo("Storing ads in database - OK\n");
}else{
echo("Storing ads in database - Failed\n");
exit();
}
echo('</pre>');
?>
</body>
</html>
Beispiel: Cronjob für Direct Mail Versand in Typo3 auf all-inkl Server[Bearbeiten]
Wenn PHP so konfiguriert ist, daß man das exec (oder auch einige andere) Kommandos ausführen kann, so ist es möglich dennoch Cronjobs auszuführen. Auch das Anfahren des Command Line Interface in Typo3 ist darüber möglich.
Eine Anfrage bei all-inkl ergab folgendes:
<Zitat Anfang>
...direkte Shell Befehle können Sie im KAS nicht eingeben. Bitte erstellen Sie sich dazu ein PHP Script mit der Endung .phpx und folgendem Inhalt:...
<?php
exec("php /www/htdocs/w00c43b9/typo3/cli_dispatch.phpsh direct_mail masssend",$ausgabe);
echo "<pre>";
print_r($ausgabe);
echo "</pre>";
?>
Geben Sie dann die HTTP Adresse zu diesem Script im KAS an. Den gewünschten Zeitintervall für die Ausführung können Sie dann auch im KAS mit angeben.
<Zitat Ende>
Den absoluten Pfad zum Skript bekommt man über die Funktion phpinfo.
Beispiel mit Geschützter phpx Datei[Bearbeiten]
Man sollte das Skript evtl. vor dem Zugriff von außen schützen. Dazu kann man ein Verzeichnis (z.B. cron) anlegen und dies über htaccess (oder direkt im all-inkl kas mit Passwort schützen)
Die Server sind scheinbar so konfiguriert, daß ein Skript mit der Endung phpx direkt über den statischen php-interpreter ausgeführt wird. Damit sollten auch Timeout Probleme kein Problem darstellen.
Cronjobs auf dem Mac[Bearbeiten]
http://www.apfelwiki.de/Main/CRON
Seit Mac OS X 10.4 werden die periodic-Skripte nicht mehr über cron, sondern mittels launchd ausgeführt.
http://www.apfelwiki.de/Main/Launchd