자동화하고 싶은 것은 다음과 같습니다.
00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +%Y-%m-%dZ%I:%M`"
오류 메시지는 다음과 같습니다.
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
답변
에서 의 crontab (5) :
“여섯 번째 ”필드 (나머지 행)는 실행할 명령을 지정합니다. 줄 바꿈 또는 % 문자까지 줄의 전체 명령 부분은 / bin / sh 또는 crontab 파일의 SHELL 변수에 지정된 셸에 의해 실행됩니다. 백 슬래시 ()로 이스케이프되지 않는 한 명령의 백분율 기호 (%)는 줄 바꿈 문자로 변경되며 첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다. 쉘의 후행 “\”와 같이 단일 명령 행을 여러 행으로 분할 할 수있는 방법이 없습니다.
% 기호 앞에 백 슬래시를 추가하십시오.
00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +\%Y-\%m-\%dZ\%I:\%M`"
답변
이 문제를 해결하려면 % 문자를 이스케이프 처리하십시오 . date +%Y-%m-%d
해야한다date +\%Y-\%m-\%d
불행히도이 답변은 약간 늦었지만 문제는 PATH 또는 백틱이 아닙니다. 문제는 단순히 백분율 문자 ‘%’가 crontab 항목에서 NEWLINE 또는 STDIN을 나타내는 데 사용되는 특수 문자라는 것입니다 .
date
명령 의 형식 입력과 충돌합니다 . 다음을 포함하는 명령은 다음 date +%Y-%m-%d
과 같이 해석됩니다.
date
Y-
m-
d
답변
나는 또한 백틱에 많은 문제가 있었다. 때로는 두 개 이상의 따옴표와 백틱이 필요합니다. $ ()로 바꾸십시오.
예:
export NOW=`date`
by
export NOW=$(date)
길슨 수 어스
답변
백 스틱과는 아무런 관련이 없습니다. 끔찍한 것은 cron이 PATH를 보지 못하고 cron에게 “PATH가 무엇입니까?” cron 스크립트에서 반복해서.
PATH=/bin:/usr/bin:/usr/sbin
* * * * * /your/script/here
그리고 나는 문자 그대로 cron 줄에 명령을 전달하는 대신 파일에 명령을 쓰는 것을 선호합니다. 하는 것이 훨씬 더 우아합니다
* * * * * /your/script/here
…보다
* * * * * perl -e '$@#$@$%%@' | grep -e '@#$@$#$@' | sed s/asfdf/asdfa/
이 행은 하나의 파일 chmod + x 파일과이 파일을 호출 할 수 있습니다.