로그 파일 이름에 현재 시간이 포함된 cron 스크립트용 로그 파일을 생성하고 싶습니다. 이것은 내가 사용하려는 명령입니다:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
불행히도 실행 중에 다음 메시지가 나타납니다.
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
date
다양한 방법으로 역할에서 벗어나려고 노력했지만 성공하지 못했습니다. crontab 파일에서 이 작업을 인라인으로 수행할 수 있습니까? 아니면 이를 수행하려면 쉘 스크립트를 만들어야 합니까?
답변1
짧은 답변:
%
다음 과 같이 이스케이프되었습니다 \%
.
0 * * * * echo hello >> ~/cron-logs/hourly/"test$(date +\%d).log"
이는 또한 $(...)
더 이상 사용되지 않는 구문 대신 명령 대체를 사용 `...`
하고 해당 명령 대체의 확장을 참조합니다.
긴 답변:
이 오류 메시지는 명령을 실행하는 셸에서 두 번째 백틱 문자가 표시되지 않았음을 나타냅니다.
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
이는 다른 답변 중 하나를 시도할 때 나타나는 두 번째 오류 메시지에서도 확인됩니다.
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
이것크론탭 맨페이지이스케이프되지 않은 첫 번째 기호까지 명령이 읽기 전용인지 확인합니다 %
.
"여섯 번째" 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 행의 전체 명령 부분(개행 문자 또는 문자까지)은 cronfile 변수에 지정된 쉘에 의해 실행됩니다
%
./bin/sh
SHELL
%
퍼센트 기호( ) 명령은\
백슬래시( )로 이스케이프하지 않는 한 다음으로 변경됩니다. 개행 문자, 첫 번째 데이터 이후의 모든 데이터는%
표준 입력으로 명령에 전송됩니다.
답변2
날짜 형식의 문자열을 변수로 사용하려면(전체 문자열이 반복되지 않도록)원하지 않는다탈출 %
하고원하지 않는다그것을 넣어$()
예를 들어, 문자열을 선언할 때 다음과 같이 작성하세요.
DATEVAR="date +%Y%m%d_%H%M%S"
$($VARIABLE_NAME)
그런 다음 다음과 같이 cron 문을 작성합니다 .
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log
감사해요사이버x86,그/그의 대답존재하다서버 장애더 완전할 수도 있습니다:
답변3
명령을 쉘 파일에 넣은 다음 cron을 사용하여 쉘 파일을 실행할 수도 있습니다.
직업
echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
예약 된 일들
0 * * * * sh jobs.sh
답변4
기본 솔루션:
- 명령을
$()
실행 하고 출력을 반환하는 데 사용됩니다 .date
%
이스케이프 문자를 사용하여 날짜/시간 형식을 UTC로 지정합니다.\
- 해당 로그 파일을 스트리밍
2>&1
하려면 끝에 추가하세요 .stdout
stderr
예:
* * * * * echo "Test crontab log" > /tmp/crontab.log.$(date --utc +\%Y\%m\%d_\%H\%M\%SZ) 2>&1
산출:
ls -lh /tmp | grep log
-rw-rw-r-- 1 ubuntu ubuntu 17 May 4 05:06 crontab.log.20190504_050601Z
-rw-rw-r-- 1 ubuntu ubuntu 17 May 4 05:07 crontab.log.20190504_050701Z