!["...을 찾는 동안 예기치 않은 EOF 오류가 발생했습니다." 오류의 원인은 무엇입니까? [복사]](https://linux55.com/image/117446/%22...%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%8F%99%EC%95%88%20%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EC%9D%80%20EOF%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%20%EC%98%A4%EB%A5%98%EC%9D%98%20%EC%9B%90%EC%9D%B8%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
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/sh
SHELL
명령의 백분율 기호(%
)\
는 백슬래시( )로 이스케이프하지 않는 한 개행 문자로 변경되며 첫 번째 이후의 모든 데이터는%
표준 입력으로 명령에 전송됩니다.
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 데몬이 보내는 모든 이메일의 제목 줄을 더 읽기 쉽게 만듭니다.