Debian
cron的rsync問題,手動沒有問題
我有一個啟動 rsync 命令的 backup.sh 文件。這個 rsync 用於在執行 raspbian 的 RaspberryPi 上備份我的專用伺服器。
(我使用鑰匙串,所以我不需要輸入任何密碼等……)
問題是,當我手動啟動批處理時,一切正常,但是當它是 crontab(使用同一使用者)時,出現以下錯誤:
2013/10/07 19:36:02 [6456] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] 2013/10/07 19:36:02 [6456] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
這是我的 backup.sh 文件
#!/bin/bash echo "_ backup start "$(date +%H:%M:%S) echo " " /usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete --log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' --rsh='ssh -p 1234' user@server.com:/path/to/archives/ /media/backup/ echo " " echo "_ backup end "$(date +%H:%M:%S)
現在是 crontab 行(crontab -e)
# m h dom mon dow command 30 5 * * * /home/user/backup.sh | mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) user+rpibackup@gmail.com
問候
(我使用鑰匙串,所以我不需要輸入任何密碼等……)
好的,所以您需要告訴在您的 cron 作業中執行的程序如何找到您的鑰匙串。
SSH 通過環境變數查找 SSH 代理(鑰匙串模擬)
SSH_AUTH_SOCK
。所以你需要在你的 crontab 中設置這個環境變數。在典型配置中,
SSH_AUTH_SOCK
是一個帶有隨機名稱的套接字的路徑。由於您使用的是鑰匙串,因此您可以輕鬆找到該套接字的備用名稱:鑰匙串將文件寫入~/.keychain
包含設置的環境變數聲明SSH_AUTH_SOCK
和其他類似變數(SSH_AGENT_PID
,GPG_AGENT_INFO
)的文件。因此,只需在您的 cron 作業中包含適當的文件。MAILTO=user+rpibackup@gmail.com 30 5 * * * . ~/.keychain/$(hostname)-sh; /home/user/backup.sh
(順便說一句:cron 有一個內置功能,可以使用作業的輸出發送郵件,這樣只有當作業確實產生了一些輸出時,您才會收到郵件。無需擺弄