Wie starte ich crontab als Benutzer: www-data?

32

Meine LAMPE ist so eingerichtet, dass sie funktioniert, user:www-dataund alle Dateien und Ordner werden mit diesen Berechtigungen erstellt.

Ich habe für Crontab als Benutzer @ Ubuntu eingerichtet.

Also mache ich crontab -eund benutze diesen Befehl:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Grundsätzlich erstellt dieser Befehl nur eine Cache-Datei an der angegebenen Stelle (keine Probleme damit), aber diese Cache-Datei wird mit Benutzerberechtigungen und nicht mit user:www-dataBerechtigungen erstellt.

Wie kann ich dafür sorgen, dass standardmäßig Dateien mit user:www-dataBerechtigungen erstellt werden?
Ich kann nicht gehen und chownjedes Mal wird die Datei neu erstellt.

Vielen Dank.

arma
quelle
Beachten Sie, dass einige Crontab-Skripte, die als WWW-Daten ausgeführt werden (z. B. for awstatsoder php5sessionclean), sich in /etc/cron.*Verzeichnissen befinden und daher nicht sichtbar sind crontab -e(auch wenn Sie WWW-Daten des Benutzers angeben ).
Skippy le Grand Gourou

Antworten:

40

Sie können Ihren Eintrag in die crontab des Systems schreiben, in der /etc/crontabein zusätzliches Argument angegeben ist, unter dem der Benutzer ausgeführt werden soll (normalerweise root, kann aber www-data sein).

Ihre Zeile würde werden:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Oder Sie können die Crontab der Benutzer-WWW-Daten bearbeiten mit su:

sudo su -c "crontab -e" www-data
mivk
quelle
1
Tatsächlich
Die zweite Option funktioniert für mich am 12.04LTS. Vielleicht nicht in späteren Versionen?
Mittwoch,
1
zweite Option funktioniert nicht am 14.04
Dgoosens
Zur Vereinfachung der Verwaltung kann die Linie auch in einer eigenen Datei in gestellt wird /etc/cron.dmit einem beschreibenden Namen, zB , /etc/cron.d/artisan.
fkraiem
2
Für die zweite Option versuchen Sie dies stattdessensudo su -c "crontab -e" www-data -s /bin/bash
Lunfel
51

Sie können crontab auch mit dem -uArgument ausführen , um eine crontab für einen bestimmten Benutzer zu bearbeiten:

sudo crontab -u www-data -e
Code Commander
quelle
Dies funktioniert am 14.04
Dgoosens
3

Um eine Crontab als Benutzer-WWW-Daten auszuführen, können Sie den folgenden Befehl verwenden:

crontab -u www-data -e

Dann schreiben Sie eine Zeile, um beispielsweise alle 15 Minuten eine PHP-Datei auszuführen:

*/15  *  *  *  * php -f /path_to_cron/cron.php

Beim Speichern werden Sie vom Redakteur gefragt:

File Name to Write: /tmp/crontab.HMpG7V 

Speichern Sie es dort, keine Sorge. crontab -eöffnet eine Datei in / tmp anstelle der eigentlichen Crontab, damit diese Ihre neue Crontab auf Fehler überprüft und Sie daran hindert, Ihre eigentliche Crontab mit diesen Fehlern zu überschreiben. Wenn keine Fehler vorliegen, wird Ihre aktuelle Crontab aktualisiert. Wenn crontab -e nur direkt an Ihre eigentliche crontab schrieb, würden Sie riskieren, Ihre gesamte crontab wegzublasen.

Um zu überprüfen, ob Ihr Cronjob ausgeführt wird, können Sie die Cron-Protokolle überprüfen. in der Regel in /var/log/cron.log oder durch Ausführen des folgenden Befehls:

crontab -u www-data -l
Spacebiker
quelle
Dieser hat für mich am Ubuntu
tristanbailey
Dies wurde zuvor von Code Commander über 4 Jahre zuvor korrekt und präziser beantwortet. Sie haben die Verwendung von "sudo" weggelassen. und warf nicht angeforderte Informationen in Bezug auf das Format der Cron-Zeile.
HörmannHH
@RichieHH, warum sollte ich das Sudo hinzufügen? Wer hat gesagt, dass der Benutzer nicht bereits als Root ausgeführt wird? Jeder, der diesen Befehl verwendet, sollte über ausreichende Kenntnisse verfügen, um zu wissen, dass er den Befehl, wenn er ihn mit Berechtigungen ausführen muss, mit sudo ausführen muss. Andernfalls sollten Sie ihn besser nicht berühren. code commander hat gerade den befehl eingegeben, aber keine weiteren
angaben gemacht
.. wenn du so schlau bist,
gibst
-1

Ich möchte einen anderen Ansatz hinzufügen. Wie bereits erwähnt, scheinen Ubuntu (16.04 hier) und www-data crontab unzuverlässig zu sein (vielleicht ist es eine Sicherheitssache?).

In unserem Unternehmen möchten wir jedenfalls, dass alle Cronjobs auf einem Server leicht zugänglich sind, damit Sie nichts verpassen. Gleichzeitig wollen wir nicht alles (wirklich alles!) Als root ausführen.

Deshalb rennen wir

sudo crontab -e 

Wie Sie es normalerweise tun, geben wir den Befehl als an

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

Dies führt / path / to / command als www-Daten aus, während der Cronjob in der root-Cronjobs-Datei bleibt (und dies wird immer korrekt ausgeführt). Es hat den schönen Vorteil, die Logfiles als root (für maximale Sicherheit) mit Pipes schreiben zu können.

Beachten Sie, dass wir unsere bevorzugte Shell übergeben, dies könnte auch / bin / sh für eine einfachere Shell sein (wir mögen nur die vollen Bash-Fähigkeiten). Für Www-data wurde keine Shell angegeben, sodass Sie ohne diese Shell Fehler erhalten. Normalerweise führt cron Jobs nur mit / bin / sh aus.

Henrik
quelle