내가 작성하려고 하는 것은 웹 사이트와 이를 지원하는 모든 MySQL DB를 백업하는 쉘 스크립트입니다. 인터넷 전체에서 예제를 찾았지만 감옥에 갇힌 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
이 스크립트는 웹 서버에 상주하므로 테스트 목적으로 SSH를 통해 서버 cd
와 디렉토리에 연결하고 bash backup.sh
. mysqldump
연결되지 않고 비밀번호를 전달하지 못한 것 같습니다('비밀번호 사용: NO'를 보고하는 오류를 반환함). 그런 다음 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 세션 - 감옥에 갇힌 세션 내에서 실행되는 프로세스는 감옥 디렉터리(종종 홈) 외부를 볼 수 없습니다. 그렇기 때문에 투옥되지 않은 세션에서는 문제가 발생하지 않습니다. Yo, 다음 내용도 확인해 보세요.위키피디아 감옥 입장상세 사항은.