crontab 작업에서 "날짜"를 실행하는 방법은 무엇입니까?

crontab 작업에서 "날짜"를 실행하는 방법은 무엇입니까?

로그 파일 이름에 현재 시간이 포함된 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/shSHELL%퍼센트 기호( ) 명령은 \백슬래시( )로 이스케이프하지 않는 한 다음으로 변경됩니다. 개행 문자, 첫 번째 데이터 이후의 모든 데이터는 %표준 입력으로 명령에 전송됩니다.

답변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하려면 끝에 추가하세요 .stdoutstderr

예:

* * * * * 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

관련 정보