Używam centos 7.0 / 6.5. Zawartość /etc/cron.hourly/mail.cron
#!/bin/sh
log=/var/log/mail.cron.log
echo "`hostname` `date`" >> $log 2>&1
mailx -s "test mail" [email protected] < $log
Wynik /var/log/mail.cron.log
myhost Mon Jul 28 11:01:01 CST 2014
Ale dostałem pusty e-mail z poprawnym tematem. Więc testuję ten cron ręcznie. Mam prawidłową treść e-maila.
myhost Mon Jul 28 11:01:01 CST 2014
myhost Mon Jul 28 11:30:29 CST 2014
Oto powiązany dziennik / var / log / cron
Jul 28 11:01:01 myhost run-parts(/etc/cron.hourly)[24577]: starting mail.cron
Jul 28 11:01:02 myhost run-parts(/etc/cron.hourly)[24605]: finished mail.cron
Zastanawiam się, jak rozwiązać ten problem.
crontab -l
? Spróbuj także zmienićecho "`hostname` `date`" >> $log 2>&1
naecho "$(hostname date)" >> $log
.crontab -l
sprawdzania crona. Jestem pewien, że praca crona działa, dostałem e-mail. Problem polega na tym, że treść wiadomości e-mail jest pusta, powinna zawierać dziennik. Nie wymagam zmiany$(hostname date)
, to nie jest problem.Odpowiedzi:
Kilka rzeczy do wypróbowania.
! / bin / sh -xv
Pierwszy daje krok po kroku wyjście ze skryptu. Najpierw spróbuję bez przekierowywania stderr do twojego pliku dziennika. Cron powinien przesłać ci kopię wyniku. Możesz dokładnie zobaczyć, gdzie idzie źle.
Drugi. Może masz błąd, który blokuje twoje standardowe wyjście? (Prawdopodobnie nie, działa tak, jak masz to w CentOS 6.5.)
Możesz także sprawdzić, czy nie ma drukowalnych znaków, używając cat.
Jeszcze inną rzeczą do wypróbowania jest użycie bezwzględnych ścieżek do poleceń, / bin / echo zamiast echo, / bin / date zamiast date, / bin / hostname zamiast nazwy hosta. (ymmv) Jim ma całkowitą rację, ponieważ cron nie zawsze używa dokładnego środowiska jako ten sam interaktywny użytkownik.
źródło
Jesteś pewien, że
cron
zadanie działa zgodnie z Twoimi komentarzami - przetestowałeś je jednak ręcznie, gdy jesteś zalogowany. Chodzi o to, że uruchomione zadaniacron
nie biorą pod uwagę ustawień i zmiennych środowiskowych, które masz u bieżącego użytkownika, więc prawdopodobnie musisz.bash_profile
przesłać plik ustawień dla użytkownika jako krok przed wysłaniem wiadomości e-mail w skrypcie.Zmień skrypt na ten:
cron
nic nie wie o twojej powłoce - jest uruchamiany przez system, więc ma minimalne środowisko. Jeśli chcesz, aby mógł znajdować twoje programy lub uruchamiać narzędzia zainstalowane w twoim systemie, musisz dać znać, gdzie one są na pierwszym miejscu, i możesz to zrobić, ustawiając.profile
zmienne na początku skryptu.Kilka przydatnych linków:
źródło
Widziałem, że masz kilka odpowiedzi, ale nie jest to jednoznaczna odpowiedź. Dla mnie zadziałało ustawienie crona w ten sposób:
* / 5 * * * * /fullpath/cron.sh | (body = "$ (cat)"; if [[-n $ body]]; następnie echo "$ body" | mail -s "Wyjście skryptu Crona" [email protected]; fi)
to przechwytuje dane wyjściowe i wysyła je do wiadomości e-mail bez niego. Otrzymuję pusty e-mail, nawet jeśli jest uruchomiony w skrypcie. (dzięki colucix)
źródło