Mam skrypt test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
kiedy wykonuję plik jako root z wiersza poleceń, działa.
sh /home/v/test.sh
kiedy ustawię go na crontab -e (to root cron), nie działa
* * * * * sh /home/v/test.sh
Co robię źle? Dzięki
Odpowiedzi:
Według mężczyzny:
Tak więc demon cron nie wie, gdzie jest php i powinieneś ręcznie podać pełną ścieżkę php (nie znam twojej prawdziwej ścieżki PHP):
Innym sposobem jest na przykład źródło / etc / profile (lub .profile / .bashrc)
Jest to przydatne, jeśli .bashrc ustawia potrzebne zmienne środowiskowe (tj. ŚCIEŻKA)
EDYTOWAĆ
Ciekawą lekturą jest „ Newbie: Intro to cron ”, nie lekceważ artykułu z tytułu (jest to lektura dla wszystkich), w rzeczywistości jest dobrze napisana, kompletna i doskonale odpowiada na twoje pytanie:
źródło
Istnieją cztery typowe przyczyny poleceń działających po wpisaniu w terminalu, ale nie z crona, w kolejności pospolitości:
$PATH
i brak innych oczekiwanych zmiennych.Jeśli Twoje zadanie generuje jakieś dane wyjściowe, w tym komunikaty o błędach, cron wysyła wiadomość e-mail z całym wynikiem. Upewnij się, że czytasz pocztę otrzymaną lokalnie lub przekazujesz ją na adres, który czytasz. Aby przesłać pocztę z konta lokalnego na inny adres, wpisz inny adres w
~/.forward
. Jeśli zadanie cron działa jako użytkownik systemu (root
,webmaster
...), upewnij się, że poczta użytkownika jest przekierowany do ciebie (i każdy inny admin); przy większości ustawień poczty wstaw wiersze jakroot: elzo
w/etc/aliases
.źródło
Demon cron zwykle wykonuje polecenie w powłoce, w której zmienna środowiskowa PATH jest ograniczona do niektórych ustawień domyślnych systemu, np. / Usr / bin: / bin.
Prawdopodobnie twoje
php
polecenie nie jest dostępne w / usr / bin lub / bin, a zatem skrypt kończy się niepowodzeniem, gdy jest wykonywany przez cron i działa poprawnie, gdy nie jest.Cron zwykle zgłasza błędy lub komunikaty zadania pocztą do użytkownika root (tj. Gdy polecenie zwraca status wyjścia! = 0 lub generuje dane wyjściowe do stdout / stderr) po zakończeniu zadania.
W zależności od systemu musisz skonfigurować dostarczanie poczty lokalnej, aby otrzymywać te wiadomości.
źródło