我做了一個腳本來創建一個mysqldump,將這個轉儲提交給我的本地Git,然後將這個Git推送到我的bitbucket帳戶。當我通過終端運行腳本時,腳本運行良好(sh script.sh
)。我做了一個Plist文件並添加它,以便Launchd運行它。當腳本運行Launchd時,Git Push不起作用
Launchd按計劃每天凌晨3點立即運行它,並執行所有命令,除了將本地Git提交到bitbucket。我究竟做錯了什麼?
正如你可以從我的腳本中看到的,我嘗試添加大量的日誌記錄,但是我得到的日誌記錄仍然沒有告訴我爲什麼這個推送不起作用,只是它沒有工作。
所以我的問題是雙重的:
- 我怎樣才能把我的本地GIT中通過的launchd運行的腳本到位桶?
- 我可以添加到我的腳本(或其他地方),所以我可以從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進行身份驗證,我在我的鑰匙串中使用我的用戶名/密碼組合來推送https。
我已經使用Bitbucket instructions設置了SSH。我做了一個ssh.sh腳本,看起來像這樣(和chmod +x
倒是它):
#!/bin/sh
exec ssh -i "Users/sara/.ssh" "[email protected]"
我加入這個腳本使用export GIT_SSH = /Library/WebServer/Documents/scripts/ssh.sh
的變量。
當我測試此設立推向到位桶(使用終端)它的工作原理,但有錯誤,我的SSH目錄或文件不存在。我假設它只是現在的工作,因爲SSH代理已在運行,而且它會通過的launchd運行的時候,因爲「不存在」的錯誤而失敗。我試着用「〜/ .ssh」來引用位置,並且包括文件名,所有的選項都給出了相同的錯誤。
接下來我該做什麼?我如何參考我的關鍵位置以便找到它?
解決方案: 最後我沒有使用環境變量。
解決辦法得到它的工作對我來說是讓SSH(我使用HTTPS之前)。最後,我加入
Host bitbucket.org
StrictHostKeyChecking no
IdentityFile /Users/sara/.ssh/id_rsa
在我的〜/ .ssh/config文件,因爲它一直在問我要我的密碼。我不想完全刪除我的密碼,但是這使腳本能夠工作。清理中的launchd雙項後(我的plist是在系統和用戶文件夾兩者)終於正確昨晚跑了。
感謝您的回答。我已經嘗試過,但還沒有完成。看到我原來的問題,我現在在哪裏。我非常接近... –
它應該指向文件名,而不是目錄。如果它在默認的'〜/ .ssh/id_rsa'或者'〜/ .ssh/id_dsa'中,它應該使用特殊的包裝器。 –
抱歉沒有讀你是全部評論。我認爲你只是缺少路徑中的初始斜槓,它應該是'/ Users/sara/.ssh/id_rsa'或類似的。 –