"...을 찾는 동안 예기치 않은 EOF 오류가 발생했습니다." 오류의 원인은 무엇입니까? [복사]

"...을 찾는 동안 예기치 않은 EOF 오류가 발생했습니다." 오류의 원인은 무엇입니까? [복사]

Godaddy 공유 호스팅 Cpanel 계정의 모든 데이터베이스를 내보내는 cron 작업을 실행하는 데 문제가 있습니다. 하지만 아래 명령에서 구문 오류를 찾는 데 문제가 있습니다.

내 AWS Ec2에서도 동일한 명령이 실행되고 있습니다.

mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/'$(date +"%Y-%m-%d")-$dbname'.sql;done

이메일 수신 오류:

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

답변1

Crontab 명령은 이스케이프 처리되지 않은 모든 항목을 %개행 문자로 바꿉니다. 이것은에서 온 것입니다crontab(5)수동내 시스템에서:

명령 필드(줄의 나머지 부분)는 실행할 명령입니다. 줄의 전체 명령 부분(개행 문자 또는 여러 문자까지)은 crontab 변수에 지정된 쉘에 의해 실행됩니다 %./bin/shSHELL명령의 백분율 기호( %) \는 백슬래시( )로 이스케이프하지 않는 한 개행 문자로 변경되며 첫 번째 이후의 모든 데이터는 %표준 입력으로 명령에 전송됩니다.

crontab 명령은 다음과 같아야 합니다.

mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/"$(date +"\%Y-\%m-\%d")-$dbname".sql;done

$(...)여기서는 이전에 작은따옴표로 묶인 내용(따라서 셸에서 확장되지 않은 내용) 도 수정했습니다 .

일반적으로 모든 중요한 크론 작업을 자체 스크립트에 넣은 다음 예약하는 것이 가장 좋습니다. 이렇게 하면 그러한 일을 더 잘 제어할 수 있고 특정 작업에 적합한 통역사를 선택할 수도 있습니다(예: ksh또는 bash대신 sh). 또한 cron 데몬이 보내는 모든 이메일의 제목 줄을 더 읽기 쉽게 만듭니다.

관련 정보