오늘이 다음과 같이 매월 첫 번째 월요일인지 확인하는 방법이 있습니다.
['$(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'