Debian

cron的rsync問題,手動沒有問題

  • October 8, 2013

我有一個啟動 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 有一個內置功能,可以使用作業的輸出發送郵件,這樣只有當作業確實產生了一些輸出時,您才會收到郵件。無需擺弄| mail。)

引用自:https://unix.stackexchange.com/questions/94002