다음 cronjob이 더 이상 작동하지 않는 이유를 이해하는 데 약간의 어려움이 있습니다.
30 3 * * * /path/to/backup_script.sh && tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$(date '+%Y%m%dT%H%M%S').tar.gz -C /path/to/source/backup/folder/ .
crontab을 소유한 동일한 사용자를 사용하여 수동으로 실행하면 작동합니다. 며칠 전에 편집했는데 작동이 멈췄어요&& tar -czvf [...]
명령을 다르게 호출해야 합니까 date
? 아니면 탈출 $
(지금 테스트하려고 하는데 방금 알아차렸습니다)?
David Sánchez Martín 덕분에 다음 오류를 보고하는 특정 로그를 찾았습니다.
/bin/sh: 1: Syntax error: Unterminated quoted string
답변1
이러한 %
기호는 항목 내에서 특별하므로 형식 문자열에서 직접 사용할 crontab
수 없습니다 .date
man 5 crontab
쓰다
여섯 번째 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 행의 전체 명령 부분(개행 문자 또는 문자까지)은 cronfile 변수에 지정된 쉘에 의해 실행됩니다
%
. 백슬래시( )로 이스케이프하지 않는 한 명령의 백분율 기호( )는 개행 문자로 변경되고 첫 번째 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다./bin/sh
SHELL
%
\
%
답변2
먼저 이를 디버깅하고 모니터링하려면 경험적으로 MAILTO 변수를 crontab에 추가하면 표준 오류에서 문제가 발생하면 이메일을 받게 됩니다.
# crontab -e
[email protected]
30 3 * * * /usr/local/bin/blahblah.sh
또한 명령이 표준 출력으로 무언가를 출력하는 경우 메일로 출력되는 것을 원하지 않으면 null로 리디렉션할 수 있습니다.
30 3 * * * /usr/local/bin/blahblah.sh > /dev/null
그런 다음 명령이 확실하지 않은 경우 아래와 같이 날짜를 변수로 입력하십시오.
30 3 * * * /path/to/backup_script.sh && THEDATE=$(date +%Y%m%dT%H%M%S) tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$THEDATE).tar.gz -C /path/to/source/backup/folder/ .
나는 그것이 더 읽기 쉽고 주변에 숨어있는 변수가 없다고 생각합니다.