crontab에서 명령이 작동하지 않습니다

crontab에서 명령이 작동하지 않습니다

오늘이 다음과 같이 매월 첫 번째 월요일인지 확인하는 방법이 있습니다.

['$(date "+%u")' = "1"] && echo 'trąba'

하지만 crontab에서 문제가 발생했다는 이메일을 보내면 오류가 발생합니다.

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file

나는 변화하려고 노력한다'$(날짜 "+%u")'"$(date '+%u')"로 변경했지만 도움이 되지 않습니다. 이메일 제목은 ["$(date '+이므로 첫 번째 인용문에 문제가 있는 것 같지만 이 코드는 터미널 내에서 실행될 때 잘 작동합니다. 어쩌면 누군가가 일주일을 확인하는 데 더 나은 "확인"이 있을 수도 있습니다. 한 달

운영 체제: CeontOS 7

제어-l

* * * * * [ "$(date +%u)" -eq 1 ] && echo trąba

답변1

고정 POSIX 코드는 다음과 같습니다.

[ "$(date +%u)" -eq 1 ] && echo trąba

오류/경고/정보는 다음과 같습니다.

  • [.. ]블록에 공백이 없습니다 .

  • 큰따옴표 대신 아포스트로피

  • -eq테스트에서는 POSIX 대신 등호를 사용하세요 [.]

  • 그 이후에는 아무 것도 인용할 필요가 없습니다.echo

  • 숫자를 인용할 필요는 없습니다.

  • date코드를 인용할 필요는 없습니다.


크로나

*/1 * * * * [ "$(/usr/bin/date +\%u)" -eq 1 ] && /usr/bin/echo trąba >> ~/cron-test
  • 이를 테스트하려면 위의 코드를 시도해 볼 수 있습니다.

  • 시스템의 다른 곳에 date바이너리를 두고 echo해당 위치, 목적 which date등을 결정할 수 있습니다.

  • Cron을 수정한 후에는 간단히 사용하고 가만히 앉아 있을 수 있습니다.

    tail -f ~/cron-test
    

답변2

crontab 항목의 명령 부분에서는 %이스케이프되지 않는 한 명령을 실행하기 전에 개행 문자로 변환됩니다. 따라서 날짜 형식 문자열에서 해당 항목을 이스케이프해야 합니다.

[ ]기타 문제: 와 그 안의 내용 사이에 공백이 필요하며 $( )작은따옴표 내에서는 확장되지 않습니다. 이것은 수정된 버전입니다:

[ "$(date "+\%u")" = "1" ] && echo 'trąba'

관련 정보