Cronjob ausführen - Anfängerfrage

wastl689

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Guten Abend zusammen,

ich habe auf meiner Diskstation seit Jahren open3a (open source Rechnungsprogramm) auf der Webstation / MariaDB laufen. Bin soweit sehr zufrieden.

Jetzt habe ich seit kurzem ein Plugin erworben, mit dem ich automatisiert Rechnungen auf Basis von Verträgen erstellen kann. Technisch wird das ganze über einen Cronjob gelöst.

Leider schaffe ich es nicht die cronjob.php per Aufgabenplaner zu starten, laut open3a Support habe ich folgende Möglichkeiten:

00 6 * * * php /volume1/web/open3a/open3A/Vertrag/cronjob.php

Dieser Befehl hat gar nicht geklappt, wenn ich den Befehl erst bei php eingebe bekomme ich zumindest ein Output.log bzw. den gleichen Inhalt per Mail(Siehe Anhang)



wget -q -O /dev/null http://DS_IP/open3a/vertrag/cronjob.php

Wenn ich diesen Befehl ausführe bleibt das Output.log leer, es kommt aber eine Mail mit diesem Inhalt:

Der Aufgabenplaner hat eine geplante Aufgabe abgeschlossen.



Aufgabe: open3a_faktura

Start: Thu, 01 Dec 2022 20:52:51 GMT

Ende: Thu, 01 Dec 2022 20:52:51 GMT

Aktueller Status: 8 (Unterbrochen)

Standardausgabe/Fehler:

Kann mir hier jemand weiterhelfen?

Danke

VG Sebastian
 

Anhänge

  • PHP_output.txt
    5,9 KB · Aufrufe: 10
  • PHP_script.txt
    50 Bytes · Aufrufe: 7
  • Webstation_Einstellungen.png
    Webstation_Einstellungen.png
    788 KB · Aufrufe: 15

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.114
Punkte
214
Warum willst du den Cronjob in den Aufgabenplaner ausführen? Das ist doch dann doppelt! Nutze doch einfach den Aufgabenplaner als Zeitsteuerung. Dort gibst du die Zeit, Tage oder das Intervall an und als Script dein PHP-Script.

Dadurch kannst du auch jederzeit die Einstellungen zum Ausführen einfach im Aufgabenmanager ändern. Hyperbackup wird z. B. auch so gesteuert.
 

wastl689

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Danke für die schnelle Rückmeldung.

Kannst du mir sagen was ich dazu machen muss? Einfach den Inhalt des PHP-Scripts (cronjob.php) in den Aufgabenplaner packen?
 

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.114
Punkte
214
Ich kenne mich wirklich nicht mit den PHP-Scripten aus, und würde es so in den Aufgabenplaner eingeben:
Code:
php /volume1/web/open3a/open3A/Vertrag/cronjob.php

Wenn das ordentlich ausgeführt wird, kannst du einfach direkt im Aufgabenplaner die Ausführzeit,Tag(e) etc einstellen. Also nicht im Skript.
Wenn es nicht unter deinen User funktioniert, auch r´"Root" probieren.
 

wastl689

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Das klappt leider nicht, ist das gleiche wie im ersten Beispiel beschrieben, mit entsprechenden Fehlermeldungen...

Gibt es noch Ideen dazu?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.304
Punkte für Reaktionen
2.864
Punkte
423
Bitte beachten
Code:
00 6 * * * php /volume1/web/open3a/open3A/Vertrag/cronjob.php
bedeutet: Führe als Users php den Job /volume1/web/open3a/open3A/Vertrag/cronjob.php aus.

Ich kenne mich mit php auch nicht aus, aber läuft er denn, wenn du interaktiv per ssh als admin auf die Konsole gehst, mit "su php" auf php umschaltest und dann "/volume1/web/open3a/open3A/Vertrag/cronjob.php" aufrufst?

Edit: Zum Link von @EDvonSchleck
Boah, was ich vor Jahren schon alles gutes geschrieben habe (y) Verblüfft mich selbst immer :ROFLMAO:
 
Zuletzt bearbeitet:

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.114
Punkte
214
Den Tipp mit „Root“ habe ich bereits gegeben – hoffe, dass er auch umgesetzt wurde ;)
 

wastl689

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo Leute, bin leider erst jetzt dazu gekommen eure Vorschläge auszuprobieren.

@Benares leider klappt das aufrufen über SSH auch nicht, gleiche Fehlermeldung wie bei PHP Output.

Was mich aber stutzig macht ist das php der User sein soll, den gibt es laut meiner Benutzerverwaltung auf der Diskstation nicht.

Die Meldung kommt egal mit welchem User ich die Datei ausführen möchte.

Hat jemand noch eine andere Idee?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.304
Punkte für Reaktionen
2.864
Punkte
423
Keine Ahnung, was dein Script macht bzw. machen soll. Bevor man es per crond scheduled muss es halt erstmal lauffähig sein :rolleyes:
 

lucaffm

Benutzer
Mitglied seit
23. Mrz 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Moin,
ich möchte mich hier einmal dranhängen, ich habe ein ähnliches Problem.
Mein Skript in php läuft, wenn ich es über den Browser aufrufe.
Also domain.de/serverip.php führt mein php file aus und es erzielt das gewünschte Ergebnis.
Das möchte ich nun als cronjob über den Aufgabenplaner abwickeln. Ihr werdet es ahnen, genau, es geht nicht.
Um zu wissen wo der php Interpreter liegt habe ich per ssh "which php" ausgeführt. Ergebnis "/bin/php"

In den Aufgabenplaner gegangen, neue Aufgabe erstellt, Nutzer root genommen, weil ich mit costum usern dort immer Probleme hatte, Zeitplan erstellt und folgendes script eingefügt:

/bin/php /volume1/web/fileserver02/serverip.php

Es passiert leider Garnichts. Was ist hier mein Fehler?

Danke im voraus.

LG
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Um zu wissen wo der php Interpreter liegt habe ich per ssh "which php" ausgeführt.
Wenn du schon Zugriff auf die Konsole hast, was spricht dagegen den Befehl vorerst auf der Konsole auszuführen bevor man das Ganze in den Aufgabenplaner packt.
Bevor man es per crond scheduled muss es halt erstmal lauffähig sein :rolleyes:
Und genau das hat @Benares bereits erwähnt. Man prüft die Dinge erst auf der Konsole und erst wenn man weiß der Befehl oder das Script läuft wie gewünscht dann kann man sich auch, um den Aufgabenplaner kümmern und es dort aufzurufen.
 

lucaffm

Benutzer
Mitglied seit
23. Mrz 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Der php Code ist lauffähig. Sobald ich ihn über die Webadresse starte, erhalte ich das gewünschte Ergebnis.
Also ist der Code lauffähig und inhaltlich korrekt.
Beispiel über die Shell:
Eingabe: $php /volume1/web/fileserver02/serverip.php
/volume1/web/fileserver02/serverip.php: line 1: $'\r': command not found -> Diese Zeile ist leer
: No such file or directoryerverip.php: line 2: ?php -> Allgemeine definition dass es sich um php handelt
/volume1/web/fileserver02/serverip.php: line 3: //: Is a directory -> auskommenttierte inhalte
/volume1/web/fileserver02/serverip.php: line 4: syntax error near unexpected token `(' -> Wo ist in der Zeile unten einfehler?
'volume1/web/fileserver02/serverip.php: line 4: `$ip_address = file_get_contents('http://checkip.dyndns.org');

Wo liegt mein Fehler bei der Ausführung, wie weise ich die Shell an php7.4 zu nutzen?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Um zu wissen wo der php Interpreter liegt habe ich per ssh "which php" ausgeführt. Ergebnis "/bin/php"
Du hattest ja das hier erwähnt.
Dann prüfe doch einmal die Version mit /bin/php -v bzw. über php -v. Es sollte ja ohnehin das gleiche angezeigt werden.

Wenn du explizit php7.4 verwenden möchtest solltest du dein script mit der entsprechenden binary wie folgt ausführen:
php74 /volume1/web/fileserver02/serverip.php oder mit dem kompletten Pfad zur binary
/usr/local/bin/php74 /volume1/web/fileserver02/serverip.php
 

lucaffm

Benutzer
Mitglied seit
23. Mrz 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Du hattest ja das hier erwähnt.
Dann prüfe doch einmal die Version mit /bin/php -v bzw. über php -v. Es sollte ja ohnehin das gleiche angezeigt werden.
Danke für Deine Antwort!

Ich erhalte folgendes Ergebnis, was mich tatsächlich selber überrascht hat, ich bin davon ausgegangen, dass die älteste Version genutzt wird:
PHP 7.3.3 (cli) (built: Oct 7 2021 06:18:21) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies

Ich wollte php7.4 verwenden, da alle Webanwendungen aktuell darüber laufen. Sollte jedoch für das Script völlig unerheblich sein.
Das Script sieht wie folgt aus:

$ip_address = file_get_contents('http://checkip.dyndns.org');

$ip_address = preg_replace('/[^0-9.]/', '', $ip_address);

$server_ip = $ip_address;

$file = fopen("ipneu.txt", "w");

fwrite($file, $server_ip . "\n");

fclose($file);

Kein großer Code, aber funktioniert wie gewünscht, nur nicht wenn ich ihn über die Shell ausführe irgendwie nicht. Bei den Pfaden, die4 du angegeben hast, bekomme ich keine Fehlermeldung, jedoch wird das Dokument "ipneu.txt" nicht überschrieben. Dies passiert wenn ich es über die Webseite Aufrufe und ausführe.
Habt ihr eine Idee woran es liegt, dass ich die Datei nicht ausführen kann. Bzw das ganze nicht das selbe ergebnis liefert?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Du könntest einmal versuchen das PHP Script als "http" User auszuführen, denn das passiert ja auch, wenn man es über die Webanwendung ausführt.

sudo -u http php74 /volume1/web/fileserver02/serverip.php

Etwas anderes fällt mir momentan nicht dazu ein.
 
  • Like
Reaktionen: lucaffm

lucaffm

Benutzer
Mitglied seit
23. Mrz 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Ich hab mein Fehler gefunden.... was soll ich sagen.
Es funktioniert alles wie es soll. Aber logischerweise wird die Datei nicht im web Verzeichnis angelegt, sondern in meinem Home-Verzeichnis.
Ich hab bisher im web Verzeichnis geschaut, in dem die php liegt, da durch Aufrufen über die Domain die Datei dort logischweise gespeichert wird, da sie dort ausgeführt wird...

Das habe ich übersehen.

Wenn ich folgenden Befehl ausführe läuft alles wie ich es möchte (auch als cronjob):
cd /volume1/web/fileserver02 && php74 /volume1/web/fileserver02/serverip.php

Sorry, aber ich hab da wohl echt auf dem schlauch gestanden, da habe ich echt net dran gedacht...

Danke für eure Unterstützung!
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.304
Punkte für Reaktionen
2.864
Punkte
423
Eingabe: $php /volume1/web/fileserver02/serverip.php
/volume1/web/fileserver02/serverip.php: line 1: $'\r': command not found -> Diese Zeile ist leer
Bei dieser Ausgabe habe ich sofort an die Bearbeitung der Datei mit einem nicht unix-fähigen Editor gedacht - CRLF (\r\n) statt nur LF (\n) an den Zeilenenden.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat