Skocz do zawartości

Web Hosting Talk

  • arubacloud.pl

    Partner technologiczny

    Aruba Cloud jest marką usług cloud na rynku europejskim. Została stworzona w celu dostarczenia firmom kompleksowych rozwiązań Cloud niezależnie od ich planów i projektów.

 

Zdjęcie

Cron - odpalenie zadania jako www-data

Cron - odpalenie zadania jako www-data ubuntu nginx cron

  • Proszę się zalogować aby odpowiedzieć
6 odpowiedzi na ten temat

Cron - odpalenie zadania jako www-data

#1 Servo32

Servo32

    Nowy użytkownik

  • Nowy
  • 17 postów

Napisany 06 czerwiec 2017 - 21:02

Serwer chodzi na Ubuntu 14.04 i nginx. Problem dotyczny Crona, chcę zacząć zadanie (crontab) przez plik - cron.txt, jego zawartość:

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

Jeśli odpalę crona jako root w konsoli:

crontab /var/www/html/cron.txt

To wszystko działa prawidłowo - skrypt test.php wykonuje się co minutę. Ale gdy odpalę go przez skrypt PHP (wywołany przez przeglądarkę, o to mi właśnie chodzi, żeby tak to działało) to zadanie dopisywane jest użytkownikowi www-data i cron wtedy nie działa. Gdy sprawdzam poleceniem:

crontab -l -u www-data

To wyświetla dodane zadanie prawidłowo, ale go nie wykonuje. Czy ma ktoś może jakiś pomysł jak zmusić crona do wykonywania również zadań www-data?


  • 0

#2 Rolej

Rolej

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 581 postów
  • Skąd:Szczecinek
  • Firma:jagielski.ovh
  • Imię:Przemek
  • Nazwisko:Jagielski

Napisany 06 czerwiec 2017 - 21:11

sudo -u www-data crontab -e 

W ten sposób dodajesz do crona dla www-data?


  • 0

#3 Servo32

Servo32

    Nowy użytkownik

  • Nowy
  • 17 postów

Napisany 06 czerwiec 2017 - 21:15

Jak napisałem wyżej, chodzi o dodawanie do crona za pomocą PHP, dokładniej:

exec('crontab /var/www/html/cron.txt');

Po wykonaniu tego, dodaje zadanie dla www-data, jest ono widoczne po wpisaniu:

crontab -l -u www-data

Ale niestety go nie wykonuje.


  • 0

#4 is_wm

is_wm

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 916 postów

Napisany 06 czerwiec 2017 - 21:28

crontab -> /usr/bin/crontab ?


  • 0

#5 Archi

Archi

    Wyznawca OVH

  • WHT+
  • PipPipPipPipPipPipPipPip
  • 2794 postów
  • Skąd:Warszawa
  • Imię:Łukasz

Napisany 06 czerwiec 2017 - 22:39

W cronie musisz albo sam inicjalizować PATH (unikać), albo podawać ścieżki absolutne. Więc nie execowe "crontab", tylko robisz "which crontab" i używasz ścieżki absolutnej, np. tak jak podał is_wm: /usr/bin/crontab.


Edytowany przez Archi, 06 czerwiec 2017 - 22:40.

  • 0

#6 kafi

kafi

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 3405 postów
  • Imię:Konrad

Napisany 06 czerwiec 2017 - 23:12

W cronie musisz albo sam inicjalizować PATH (unikać), albo podawać ścieżki absolutne. Więc nie execowe "crontab", tylko robisz "which crontab" i używasz ścieżki absolutnej, np. tak jak podał is_wm: /usr/bin/crontab.

 

Yyy... Ale w zadaniach cron są ścieżki bezwzględne, a phpowy skrypt tylko poleceniem "crontab" aktualizuje tablicę cron użytkownika www-data i robi to raczej skutecznie, skoro crontab -l -u wyświetla wpisy poprawnie.

 

Przyczyna nieuruchamiania tych zadań jest prozaiczna - w Debianie i pochodnych (bo użytkownik www-data to wymysł debianowy) użytkownik www-data ma ustawiony shell nologin - który blokuje m.in. wykonywanie zadań via crontab.

 

Rozwiązania problemu są trzy:

- pierwsze, z piekła rodem, to zmiana shella na /bin/bash - ale hmm... to zło

- drugie - nadanie jakiemuś "zwykłemu" użytkownikowi uprawnień SUDO jako www-data i wykonywanie w crontabie polecenia sudo -u www-data polecenie

- trzecie - najbardziej zalecane ;) to zrezygnować z wykonywania zadań z uprawnieniami www-data.


W cronie musisz albo sam inicjalizować PATH (unikać), albo podawać ścieżki absolutne. Więc nie execowe "crontab", tylko robisz "which crontab" i używasz ścieżki absolutnej, np. tak jak podał is_wm: /usr/bin/crontab.

 

Yyy... Ale w zadaniach cron są ścieżki bezwzględne, a phpowy skrypt tylko poleceniem "crontab" aktualizuje tablicę cron użytkownika www-data i robi to raczej skutecznie, skoro crontab -l -u wyświetla wpisy poprawnie.

 

Przyczyna nieuruchamiania tych zadań jest prozaiczna - w Debianie i pochodnych (bo użytkownik www-data to wymysł debianowy) użytkownik www-data ma ustawiony shell nologin - który blokuje m.in. wykonywanie zadań via crontab.

 

Rozwiązania problemu są trzy:

- pierwsze, z piekła rodem, to zmiana shella na /bin/bash - ale hmm... to zło

- drugie - nadanie jakiemuś "zwykłemu" użytkownikowi uprawnień SUDO jako www-data i wykonywanie w crontabie polecenia sudo -u www-data polecenie

- trzecie - najbardziej zalecane ;) to zrezygnować z wykonywania zadań z uprawnieniami www-data.


  • 0

#7 Archi

Archi

    Wyznawca OVH

  • WHT+
  • PipPipPipPipPipPipPipPip
  • 2794 postów
  • Skąd:Warszawa
  • Imię:Łukasz

Napisany 06 czerwiec 2017 - 23:14

Można jeszcze czwartym rozwiązaniem pojechać, nieco na około: wykonywać skrypt PHP przez np. CURL z uprawnieniami roota. Można dodatkowo go zabezpieczyć, żeby dopuszczał tylko 127.0.0.1. Wtedy root sobie CURLem wykonuje example.com/cron.php, a to już odpala się z www-data. Osobiście preferuję to rozwiązanie zamiast innego usera czy całkowitej rezygnacji.


Edytowany przez Archi, 06 czerwiec 2017 - 23:15.

  • 0






Także otagowane jednym lub więcej z tych słów kluczowych: ubuntu, nginx, cron

0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników