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 데몬이 보내는 모든 이메일의 제목 줄을 더 읽기 쉽게 만듭니다.