Jak sprawić, aby crontab generował unikalny dziennik za każdym razem, gdy uruchamia zadanie?

6

Oto zadanie crontab

/usr/local/bin/python2.7 /home/scripts/script.py >> /home/scripts/logs/log.log 2>&1

Jak wygenerować nowy dziennik przy każdym uruchomieniu zadania?

Cieszę się, dodając rosnący licznik do pliku dziennika za każdym razem, gdy jest generowany. Nie wiem jak to zrobić.

Czy naprawdę muszę wykonać inną pracę crona, aby to zrobić?

nebulus
źródło

Odpowiedzi:

7

Możesz użyć date polecenie do wygenerowania unikalnej (ish) nazwy pliku:

/usr/local/bin/python2.7 /home/scripts/script.py > /home/scripts/logs/"`date +\%d\%m\%y_\%H\%M\%S`".log 2>&1

EDYTOWAĆ: Upewnij się, że uciekłeś od znaków procentowych ( \% ). Oni mają specjalne znaczenie w cron i crontab zwróci błąd.

W ten sposób nowy plik dziennika (tzw <date_time>.log ) zostanie utworzony za każdym razem, gdy Twoja praca będzie działać.

$ date; touch "`date +%d%m%y_%H%M%S`.log"
  Tue Sep 25 04:39:25 CEST 2012
$ ls *log
  250912_043925.log

Zakładając, że twój skrypt nie działa częściej niż raz na sekundę (czego nie może zrobić, jeśli używasz prostego crontab), powinieneś być w porządku.

Jeśli, jak sugerują komentarze, skrypt jest uruchamiany przez różnych użytkowników, możesz dodać nazwę użytkownika do nazwy pliku dziennika:

/usr/local/bin/python2.7 /home/scripts/script.py > /home/scripts/logs/$(echo -n `whoami`_`date +\%d\%m\%y_\%H\%M\%S`).log 2>&1
terdon
źródło
.. zakładając, że praca działa tylko jako jeden użytkownik. W przeciwnym razie jest to dobre rozwiązanie.
Sirex
@seaworthy Wystąpił błąd w mojej oryginalnej odpowiedzi, proszę zobaczyć moją edycję.
terdon
@terdon, oryginał nie działał, próbując teraz poprawionej wersji.
nebulus
@terdon, dobre rzeczy! Dziękuję Ci bardzo!
nebulus