Ausführen eines Cronjobs als www-data

Ausführen eines Cronjobs als www-data

Mein Server läuft auf Ubuntu und nginx. Mein Problem betrifftCron, ich möchte es (crontab) mit einer Datei starten -cron.txt, Sein Inhalt:

* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

Wenn ich es mit einem Befehl ausführe:, crontab /var/www/html/cron.txtfunktioniert es perfekt, Skripttest.phpwird ausgeführt. Aber wenn ich dasselbe mache, aber ein PHP-Skript verwende (Ausführung über den Browser):, exec('crontab /var/www/html/cron.txt');funktioniert es nicht.

Beim Überprüfen des aktuellen Cronjobs mit dem Befehl: crontab -l -u www-datawird die Zeile aus der Datei angezeigt, aber Cron erledigt seine Aufgabe nicht. Vielleicht hängt das mit Berechtigungsproblemen zusammen? Weil es nur funktioniert, wenn es als Root ausgeführt wird. Gibt es eine Möglichkeit, Cron zu zwingen, auch die Aufgaben von www-data auszuführen?

Antwort1

Bitte verwenden Sie /etc/crontab. Diese Methode zur Ausführung von Cron-Jobs ermöglicht es Ihnen, der Aufgabe einen Benutzernamen hinzuzufügen. Das Ergebnis sieht dann so aus:

* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log

Sie können dies tun nano /etc/crontabund die Zeile zur Datei hinzufügen.

Aber wenn ich dasselbe mache, aber ein PHP-Skript verwende (Ausführung über den Browser): exec('crontab /var/www/html/cron.txt');, funktioniert es nicht.

Wenn das nicht funktioniert, liegt wahrscheinlich ein anderes Problem vor als die Verwendung von „crontab“. Beispiel: Müssen Sie nicht umleiten? (D. h. > /dev/null 2>/dev/null &am Ende Ihres Exec-Befehls verwenden?)

Antwort2

Ich habe erreicht, was ich wollte. Alles am Code in meinem ursprünglichen Beitrag ist in Ordnung. Das einzige, was ich hätte wissen müssen, ist, dass der Benutzer von www-data nicht schreiben darf /var/log, also hatte ich dort keine Ausgabe. Und außerdem habe ich in meinem PHP-Skript versucht, eine Datei zu erstellen und etwas hineinzuschreiben. Dazu ist der absolute Pfad erforderlich, also sollte es so aussehen:

dirname(__FILE__) . '/myfile.txt';

Nach diesen Änderungen funktioniert alles wie erwartet.

verwandte Informationen