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

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' [email protected]:/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) [email protected]

問候

答案1

(我使用鑰匙串,所以我不需要輸入任何密碼等......)

好的,所以您需要告訴 cron 作業中執行的程式如何找到您的鑰匙圈。

SSH 透過環境變數尋找 SSH 代理(鑰匙串模擬)SSH_AUTH_SOCK。所以你需要在你的 crontab 中設定這個環境變數。

在典型配置中,SSH_AUTH_SOCK是具有隨機名稱的套接字的路徑。由於您使用的是鑰匙串,因此您可以輕鬆找到該套接字的備用名稱:鑰匙串將檔案寫入包含~/.keychain設定SSH_AUTH_SOCK和其他類似變數(SSH_AGENT_PIDGPG_AGENT_INFO)的環境變數宣告。因此,只需在您的 cron 作業中包含適當的文件即可。

[email protected]
30 5  *   *   *     . ~/.keychain/$(hostname)-sh; /home/user/backup.sh

(旁白:cron 有一個內建功能可以發送帶有作業輸出的郵件,這樣您只有在作業確實產生一些輸出時才會收到郵件。無需擺弄| mail。)

答案2

ssh 連線無法透過 cronjob 運作。它應該如何執行 SSH 身份驗證?沒有看到列出身份密鑰或密碼的嘗試。如果這就是它的工作原理,我會將“-i”與您的(無密碼...)密鑰的路徑貼在一起。命令列和 cronjob 之間的主要差異往往取決於環境(如環境變數、缺少控制終端等)

答案3

我認為您在主題上存在引用問題:

mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]

應該是這樣的:

mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]

替代方法

我也會將電子郵件包裝到腳本中。

#!/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' [email protected]:/path/to/archives/ /media/backup/

  echo " "
  echo "_ backup end "$(date +%H:%M:%S)
) | mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]

然後將 crontab 條目更改為:

30 5  *   *   *     /home/user/backup.sh

還要確保運行此 cron 的帳戶實際上可以發送電子郵件。做一個測試。

相關內容