Ssh

由於 cronjob 在 shell 上工作,rsync over ssh 失敗 - NAS4Free

  • March 26, 2013

這是我的備份使用者主目錄中的 rsync.sh

$ cat rsync.sh
 #!/bin/sh
 rsync -avvvz --stats --log-file="/var/log/rsync_client.log" -e "ssh -i /mnt/stor0/backup/backup-rsync-key" /mnt/stor0/home/ nas@remotehost:/mnt/backup/

當我在 shell 上以備份使用者身份執行 ./rsync.sh 時,它可以正常工作(無密碼)

$ ./rsync.sh
opening connection using: ssh -i /mnt/stor0/backup/backup-rsync-key -l nas remotehost rsync --server -vvvlogDtprze.iLsf . /mnt/backup/
sending incremental file list
[sender] make_file(.,*,0)
.
.
.
list of files to backup

現在我的 cronjob

<job>
<enable/>
<uuid>1c7ad7f4-0daa-477b-9e7b-eb7e5861e3d3</uuid>
<desc>run backup to nas</desc>
<minute>0</minute>
<hour>4</hour>
<day/>
<month/>
<weekday>1</weekday>
<weekday>3</weekday>
<weekday>5</weekday>
<all_mins>0</all_mins>
<all_hours>0</all_hours>
<all_days>1</all_days>
<all_months>1</all_months>
<all_weekdays>0</all_weekdays>
<who>backup</who>
<command>/mnt/stor0/backup/rsync.sh</command>
</job>

當我嘗試執行作業時,它失敗並且 client.log 顯示

rsync error: unexplained error (code 255) at io.c(605) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]

為什麼當我手動執行命令時它正在執行,為什麼它在 NAS4Free 上作為 cronjob 失敗?

當您手動執行該命令時,將使用您自己的所有環境設置。當你從 cron 執行它時,你的環境設置和你的 ssh 代理設置都不能用於腳本。

在這種情況下,由於您使用 SSH 作為傳輸代理,我猜想當您從 cron 執行 ssh 連接時出現問題。如果您通常使用 ssh 代理,則需要確保該資訊可用作腳本的環境變數。如果您改用沒有密碼的密鑰,那麼還有其他原因會導致連接失敗。ssh 在 cron 使用的 $PATH 中嗎?您可以使用“ssh -v”建立連接以獲取更多資訊嗎?

引用自:https://serverfault.com/questions/491356