웹사이트와 이를 지원하는 모든 MySQL 데이터베이스를 백업하는 쉘 스크립트를 작성하려고 합니다. 온라인에서 몇 가지 예를 찾았지만 감옥에 갇힌 SSH 세션 내의 bash에서 스크립트를 실행하면 실패합니다. SSH 세션에 직접 명령을 입력하면 제대로 작동합니다.
#!/bin/sh
DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password
mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql
tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar
스크립트는 웹 서버에 있으므로 테스트 목적으로 서버의 cd
디렉터리에 SSH로 접속하여 실행했습니다 bash backup.sh
. mysqldump
연결되지 않았고 비밀번호를 전달할 수 없는 것 같습니다("비밀번호 사용: 아니요"라는 오류 보고서가 반환되었습니다). "). 그런 다음 tar 명령이 실패하고 /home/website/public_html
"해당 파일 또는 디렉터리가 없습니다"라고 계산할 수 없다고 보고합니다. tar
그런 다음 이전 오류로 인해 오류 상태로 종료되고 있음을 보고합니다.
내가 여기서 무엇을 놓치고 있는 걸까요?
답변1
서버에 로그인하고 다음을 실행하여 스크립트의 Windows 줄 끝을 확인하세요.
cat -v /path/to/script
줄이 로 끝나면 ^M
문제가 됩니다.
다음을 실행하여 끊어진 줄 끝이 있는 파일을 수정할 수 있습니다.
dos2unix /path/to/script
dos2unix가 서버에 없으면 다음과 같이 sed를 사용할 수 있습니다.
sed -i 's/\r$//' /path/to/script
답변2
사용자 이름을 변수에 할당했지만 THEUSER
명령 mysqldump
에서는 해당 변수를 사용하고 있습니다 THEDBUSER
.
답변3
tardir=$PWD ; cd /home/website/public_html &&
tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"
그렇지 않으면:
tar -C/home/website/public_html -czf \
sitebackup_complete-office_"$THEDATE.tar"
일반적으로 많은 사람들은 다음 tars
과 같은 경우가 아니면 절대 경로를 사용할 수 없습니다.명확한 지침이 방법.
기본적으로 GNU tar는 입력 또는 출력에서 선행 문자를 제거하고
/
구성 요소가 포함된 파일 이름에 대해 불평합니다..
. 이 옵션은 이 동작을 끕니다.
ssh's
명령이 명령 패스 및 참조를 기반으로 경로를 사전 확인하는 것은 전적으로 가능합니다 . 이는 경로 이름의 변수 확장과 관련이 있습니다.
답변4
문제에 대한 귀하의 설명을 올바르게 이해했다면 주요 차이점은 다음과 같습니다.교도소SSH 세션 - 감옥에 갇힌 세션에서 실행 중인 프로세스는 감옥 디렉터리(일반적으로 홈 디렉터리) 외부의 콘텐츠를 볼 수 없습니다. 이것이 바로 비감금 세션에 문제가 없는 이유입니다. 당신은 또한 볼 수 있습니다위키피디아 감옥 입구자세한 내용은.