这是我的备份用户主目录中的 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 失败?
答案1
当您手动运行该命令时,将使用您自己的所有环境设置。当您从 cron 运行它时,脚本将无法使用您的环境设置,例如您的 ssh 代理设置。
在这种情况下,由于您使用 SSH 作为传输代理,我猜当您从 cron 运行 ssh 连接时,它出了问题。如果您通常使用 ssh 代理,则需要确保该信息可作为脚本的环境变量使用。如果您使用的是没有密码的密钥,则还有其他原因导致连接失败。ssh 是否在 cron 使用的 $PATH 中?您可以使用“ssh -v”建立连接以获取更多信息吗?