由于 cronjob 在 shell 上运行,因此通过 ssh 进行的 rsync 失败 - NAS4Free

由于 cronjob 在 shell 上运行,因此通过 ssh 进行的 rsync 失败 - 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 失败?

答案1

当您手动运行该命令时,将使用您自己的所有环境设置。当您从 cron 运行它时,脚本将无法使用您的环境设置,例如您的 ssh 代理设置。

在这种情况下,由于您使用 SSH 作为传输代理,我猜当您从 cron 运行 ssh 连接时,它出了问题。如果您通常使用 ssh 代理,则需要确保该信息可作为脚本的环境变量使用。如果您使用的是没有密码的密钥,则还有其他原因导致连接失败。ssh 是否在 cron 使用的 $PATH 中?您可以使用“ssh -v”建立连接以获取更多信息吗?

相关内容