Wysyłanie danych wyjściowych crona do pliku ze znacznikiem czasu w nazwie

37

Mam taki crontab w konfiguracji LAMP:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Spowoduje to zapisanie wyniku pliku do cron.log . Jednak po ponownym uruchomieniu zastępuje wszystko, co poprzednio znajdowało się w pliku.

Jak mogę przekonać crona do wyjścia do pliku ze znacznikiem czasu w nazwie pliku?

Przykładowa nazwa pliku może wyglądać tak: 2010-02-26-000000-cron.log

Tak naprawdę nie dbam o ten format, o ile ma on jakiś znacznik czasu.

Z góry dziękuję.

Philip Morton
źródło
8
jeśli nie chcesz $HOME/cron.logzostać zastąpiony, >>nie używaj>
Dave Cheney

Odpowiedzi:

65

Próbować:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Baw się z formatem daty, jeśli chcesz; pamiętaj tylko, żeby uciec %jak \%wyżej.

rozszczepienie
źródło
Pozwólcie, że ogólnie zasugeruję podejście do nazw plików, takich jak 0 0 * * * /some/path/to/a/file.php > $HOME/scriptname-data + \% Y \% m \% d \% H \% M \% S.log
Kristian
Jeśli potrzebujesz trochę bardziej czytelnej dla ludzi, spróbuj: date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cron.log
DevilCode
4
@DevilCode, tak, chociaż spacje w nazwach plików nie są zbyt konwencjonalne w Uniksie. Myślniki lub podkreślenia może być lepszym rozwiązaniem: date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log.
rozszczepienie
1
Te cholerne postaci ucieczki zawsze mnie dopadają. Dzięki za przypomnienie!
Tony-Caffe,
13

zdecydowanie zalecam zapisanie wszystkiego w tym samym pliku, używając znacznika czasu, jak wyjaśniono tutaj .

usunąć

2> i 1

i uruchom go przez skrypt znacznika czasu przed zapisaniem go w pliku dziennika (jak wyjaśniono w powyższym linku).

Tony Gil
źródło
6

Możesz również dołączyć dane wyjściowe do pliku dziennika, wykonując następujące czynności:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
Wstrzymano do odwołania.
źródło
0

Zmodyfikowałem skrypt w następujący sposób:

`/bin/date +\%Y\%m\%d`.log
Ardhy
źródło
-2

Rozwiązałem ten problem; po prostu dodaj ścieżkę daty (/ bin / date) przed poleceniem date.

użytkownik213005
źródło
2
Dodaj więcej informacji i przykład.
Danijel
-2
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log
Ivan Kovtun
źródło
5
To wymagałoby wielu wyjaśnień.
Sven