Ssh
由於 cronjob 在 shell 上工作,rsync over ssh 失敗 - NAS4Free
這是我的備份使用者主目錄中的 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”建立連接以獲取更多資訊嗎?