mysqldump를 만들 스크립트를 만들었습니다.이 덤프를 로컬 Git에 커밋 한 다음이 Git을 내 bitbucket 계정으로 푸시합니다. 터미널 (sh script.sh
)을 통해 실행하면 스크립트가 제대로 실행됩니다. Plist 파일을 만들어 Launchd가 실행하도록 추가했습니다.스크립트가 Launchd를 통해 실행될 때 Git Push가 작동하지 않습니다.
Launchd는 매일 밤 3시에 계획대로 계획대로 실행하고 로컬 Git 커밋을 bitbucket으로 푸시하는 것을 제외하고는 모든 명령을 잘 실행합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
제 스크립트에서 볼 수 있듯이 많은 로깅을 추가하려고했지만 로깅은 여전히 작동하지 않는 이유를 알려주지 않습니다. 단지 작동하지 않는 것입니다.
그래서 제 질문은 두 가지이다 :
- 어떻게 내 로컬 힘내 launchd에 통해 실행 스크립트에서의 Bitbucket 밀어 수 있습니까?
- launchd 또는이 스크립트에서 로깅 할 수 있도록 내 스크립트 (또는 다른 곳)에 추가 할 수있는 항목이 무엇이 잘못되었는지 진단 할 수 있습니까?
내 스크립트를
#!/bin/sh
exec 1> /Library/WebServer/Documents/backup/fulllog
# echo start message
echo $(date) "- Backup Script Processing" >> /Library/WebServer/Documents/backup/log
# navigate to backup dir
if
cd /Library/WebServer/Documents/backup/
then
echo $(date) "- Successfully navigated to backup dir" >> /Library/WebServer/Documents/backup/log
else
echo $(date) "- Could not locate backup directory" >> /Library/WebServer/Documents/backup/log
exit 0
fi
# echo message
echo $(date) "- Exporting SQL dump" >> /Library/WebServer/Documents/backup/log
if
#dump the db into a .sql file
/usr/local/mysql/bin/mysqldump --user=root --password=password --skip-extended-insert library > /Library/WebServer/Documents/backup/library.sql;
then
#echo success message
echo $(date) "- SQL dump successful" >> /Library/WebServer/Documents/backup/log
else
#echo error message
echo $(date) "- Mysqldump error" >> /Library/WebServer/Documents/backup/log
exit 0
fi
#add just created mysqldump to git
if
/usr/local/git/bin/git add library.sql
then
echo $(date) "- Backup successfully added to local Git staging" >> /Library/WebServer/Documents/backup/log
else
echo $(date) "- Error adding backup to local Git staging" >> /Library/WebServer/Documents/backup/log
exit 0
fi
if
/usr/local/git/bin/git add log
then
echo $(date) "- Log successfully added to local Git staging" >> /Library/WebServer/Documents/backup/log
else
echo $(date) "- Error adding log to local Git staging" >> /Library/WebServer/Documents/backup/log
exit 0
fi
if
/usr/local/git/bin/git commit -m 'Nightly SQL dump'
then
echo $(date) "- Backup successfully committed to local Git" >> /Library/WebServer/Documents/backup/log
else
echo $(date) "- Error committing backup to local Git" >> /Library/WebServer/Documents/backup/log
exit 0
fi
if
/usr/local/git/bin/git push origin master
then
echo $(date) "- Backup Git Commit successfully pushed to origin master" >> /Library/WebServer/Documents/backup/log
else
echo $(date) "- Backup Git Commit not pushed to origin master" >> /Library/WebServer/Documents/backup/log
fi
편집은 추가 : 이 답변 주셔서 감사합니다. 환경 변수 GIT_TRACE=1
을 추가했습니다.
스크립트에서 Bitbucket에 대한 인증이 없다는 것이 맞습니다. Keychain에서 username/pw 콤보를 사용하여 https를 푸시했습니다.
Bitbucket instructions을 사용하여 SSH를 설정했습니다. I는 다음과 같이 보이는 ssh.sh 스크립트를 만들었다 (및 chmod +x
'는 그것을 D) :
#!/bin/sh
exec ssh -i "Users/sara/.ssh" "[email protected]"
난 export GIT_SSH = /Library/WebServer/Documents/scripts/ssh.sh
를 사용하여 변수로서 스크립트를 추가했다.
이 설정을 테스트하여 Bitbucket (터미널을 사용)으로 설정하면 작동하지만 SSH 디렉토리 또는 파일이 존재하지 않는다는 오류가 발생합니다. 나는 ssh-agent가 이미 실행 중이며 launchd를 실행할 때 '존재하지 않습니다'라는 오류로 인해 실패 할 것이기 때문에 지금 만 작동한다고 가정합니다. "~/.ssh"라는 위치를 참조하려고 시도했지만 파일 이름을 포함하면 모든 옵션에서 동일한 오류가 발생합니다.
다음에해야 할 일은 무엇입니까? 내 주요 위치를 어떻게 찾을 수 있도록 참조 할 수 있습니까?
솔루션 : 결국 환경 변수를 사용하지 않았습니다.
나를 위해 작동하게하는 해결책은 SSH (이전에 HTTPS를 사용하고있었습니다)를 활성화하는 것이 었습니다. 결국 나는 덧붙였다
Host bitbucket.org
StrictHostKeyChecking no
IdentityFile /Users/sara/.ssh/id_rsa
내 ~/.ssh/config 파일에 계속해서 암호를 물어 보았 기 때문에. 패스 프레이즈를 완전히 제거하고 싶지는 않았지만 스크립트를 사용 가능하게 만들었습니다. Launchd에서 이중 항목을 지운 후에 (내 plist는 System 폴더와 User 폴더에 모두 있음) 결국 어젯밤에 올바르게 실행되었습니다.
답변 해 주셔서 감사합니다. 나는 이것을 시도했지만, 아직 꽤 일하지는 않았다. 지금 내가 어디에 있는지 원래 질문을 봅니다. 나는 매우 가까이에있다 ... –
디렉토리가 아니라 파일 이름을 가리켜 야한다. 이것이'~/.ssh/id_rsa' 나'~/.ssh/id_dsa'의 기본값이라면 특별한 wrapper와 함께 작동해야합니다. –
죄송합니다. 전체적인 의견을 읽지 못했습니다. 경로의 초기 슬래시가 누락 된 것 같아요.'/ Users/sara/.ssh/id_rsa' 또는 유사해야합니다. –