Jak uruchomić crontab jako użytkownik: www-data?

32

Moja LAMPA jest skonfigurowana do pracy user:www-datai wszystkie pliki i foldery są tworzone z tymi uprawnieniami.

Mam konfigurację crontab jako użytkownik @ ubuntu.

Więc robię crontab -ei używam tego polecenia:

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

Zasadniczo to polecenie po prostu tworzy plik pamięci podręcznej w określonym miejscu (nie ma z tym problemów), ale ten plik pamięci podręcznej jest tworzony z użytkownikiem: uprawnienia użytkownika, a nie user:www-datauprawnienia.

Jak mogę sprawić, że domyślnie utworzy plik z user:www-datauprawnieniami?
Nie mogę przejść i za chownkażdym razem plik jest odtwarzany.

Dzięki.

arma
źródło
Zauważ, że niektóre skrypty crontab, które działają jako dane www (np. For awstatslub php5sessionclean), znajdują się w /etc/cron.*katalogach i dlatego nie są widoczne crontab -e(nawet przy podawaniu danych www użytkownika ).
Skippy le Grand Gourou,

Odpowiedzi:

40

Możesz napisać swój wpis w systemie crontab /etc/crontab, który wymaga dodatkowego argumentu określającego, że użytkownik ma być uruchamiany (zwykle root, ale może to być www-data).

Twoja linia stałaby się:

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

Lub możesz edytować tabelę danych www użytkownika za pomocą su:

sudo su -c "crontab -e" www-data
mivk
źródło
1
właściwie druga opcja nie działa w większości wersji Ubuntu
użytkownik1231
Druga opcja działa dla mnie na 12.04LTS. Może nie w późniejszych wersjach?
mivk
1
druga opcja nie działa 14.04
dgoosens
Dla ułatwienia zarządzania, linia może być również umieścić w osobnym pliku w /etc/cron.dz nazwy opisowej, na przykład , /etc/cron.d/artisan.
fkraiem
2
W przypadku drugiej opcji spróbuj tegosudo su -c "crontab -e" www-data -s /bin/bash
Lunfel,
51

Możesz również uruchomić crontab z -uargumentem, aby edytować crontab dla konkretnego użytkownika:

sudo crontab -u www-data -e
Code Commander
źródło
działa to 14.04
dgoosens 28.07.15
3

Aby uruchomić crontab jako dane www użytkownika, możesz użyć następującego polecenia:

crontab -u www-data -e

Następnie piszesz wiersz, na przykład, aby uruchamiać plik php co 15 minut:

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

Podczas zapisywania edytor zapyta:

File Name to Write: /tmp/crontab.HMpG7V 

Zapisz to, bez obaw. crontab -eotwiera plik w / tmp zamiast rzeczywistego pliku crontab, aby mógł sprawdzić, czy w nowym pliku crontab nie ma błędów, i zapobiec nadpisaniu pliku crontab tymi błędami. Jeśli nie ma żadnych błędów, twój aktualny plik crontab zostanie zaktualizowany. Jeśli crontab -e właśnie napisał prosto do twojego prawdziwego pliku crontab, wtedy ryzykowałbyś zdmuchnięciem całego pliku crontab.

Aby sprawdzić, czy działa cronjob, możesz sprawdzić dzienniki cron. zwykle w /var/log/cron.log lub wykonanie następującego polecenia:

crontab -u www-data -l
Spacebiker
źródło
Ten pracował dla mnie na Ubuntu
tristanbailey
Na to pytanie wcześniej i poprawnie zwięźlej odpowiedział dowódca kodu ponad 4 lata wcześniej. Pominąłeś użycie „sudo”. i rzucił niepotrzebne informacje dotyczące formatu linii cron.
HörmannHH
@RichieHH, dlaczego powinienem dodać sudo? Kto powiedział, że użytkownik nie działa jeszcze jako root? Każdy, kto używa tego polecenia, powinien mieć wystarczającą wiedzę, aby wiedzieć, że jeśli będzie musiał uruchomić polecenie z uprawnieniami, będzie musiał go uruchomić z sudo, w przeciwnym razie lepiej nie dotykać ... a ty mówisz bardziej zwięźle ...? Code
Commander
.. jeśli jesteś taki mądry, lepiej zacznij udzielać odpowiedzi zamiast krytykować pracę innych, może wtedy zaczniesz zdobywać reputację
Spacebiker
-1

Chciałbym dodać inne podejście. Jak wspomnieli inni, Ubuntu (tutaj 16.04) i crontab www-data wydają się niewiarygodne (może to kwestia bezpieczeństwa?).

W każdym razie w naszej firmie lubimy mieć wszystkie cronjoby na serwerze łatwo dostępne, więc niczego nie przegapisz. Jednocześnie nie chcemy uruchamiać wszystkiego (naprawdę nic!) Jako root.

Dlatego biegniemy

sudo crontab -e 

Jak zwykle, a następnie określamy polecenie jako

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

Spowoduje to wykonanie polecenia / path / to / jako danych www, jednocześnie zachowując cronjob w głównym pliku cronjobs (i to zawsze będzie działać poprawnie). Ma tę zaletę, że może zapisywać pliki dziennika jako root (dla maksymalnego bezpieczeństwa) przy użyciu potoków.

Zauważ, że przekazujemy naszą preferowaną powłokę, może to być również / bin / sh dla prostszej powłoki (lubimy pełne możliwości bash). Www-data nie ma określonej powłoki, więc bez niej pojawią się błędy. Zwykle cron uruchamia zadania tylko z / bin / sh.

Henrik
źródło