Chcę utworzyć plik dziennika dla skryptu cron, który ma bieżącą godzinę w nazwie pliku dziennika. Oto polecenie, którego próbowałem użyć:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Niestety pojawia się ten komunikat, gdy działa:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Próbowałem uciec przed tą date
częścią na różne sposoby, ale bez większego szczęścia. Czy jest to możliwe, aby stało się to in-line w pliku crontab, czy muszę utworzyć skrypt powłoki, aby to zrobić?
date +\%Y\ \%m\ \%d\ \%H:\%M:\%S
-cronlogMożesz także umieścić swoje polecenia w pliku powłoki, a następnie uruchomić plik powłoki za pomocą crona.
jobs.sh
cron
źródło
Jeśli chcesz ustawić ciąg formatowania daty jako zmienną (aby uniknąć duplikowania całego ciągu), NIE uciekaj
%
i NIE wkładaj go$()
Na przykład, deklarując ciąg, po prostu napisz:
Następnie napisz instrukcję cron w
$($VARIABLE_NAME)
następujący sposób:Dzięki cyberx86 , jej / jego odpowiedź na ServerFault może być bardziej kompletny:
źródło
W cronie możesz użyć tej prostej składni:
źródło
-d
opcję, która nie jest używana w pytaniu (i nie wyjaśniłeś jej). Jak usprawiedliwiasz tę „prostą składnię”?Wszystkie powyższe odpowiedzi używają podwójnych cudzysłowów (nie wszystkie działały w mojej konfiguracji). To działało dla mnie:
źródło
Podstawowe rozwiązanie:
$()
do wykonywaniadate
poleceń i zwraca dane wyjściowe%
znak za pomocą\
2>&1
na końcu do strumieniowego przesyłania zarównostdout
istderr
do tego pliku dziennikaPrzykład:
Wynik:
źródło