如何使用cron和rsync将文件从远程服务器传输到本地路径

时间:2016-04-06 22:58:17

标签: linux ssh cron crontab rsync

我正在寻找一些知识来帮助我理解为什么在使用rsync将文件从远程服务器传输到本地路径时我使用cron失败。

我的目标是在预定时间运行预定的cron作业并成功执行我的转移脚本

在众多Google搜索中,我将以下rsync命令放在一起:

rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc pi@192.168.0.10:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/

我已经设置了远程服务器,因此它不会通过使用ssh-keygen rsa生成一个存储在authorised_keys文件中的公钥来要求输入密码。我登录了当地的'机器使用SSH并输入命令来“拉”'从远程服务器到本地计算机的文件。

一旦我测试了上面的rsync命令,我认为我已经将其固定,因此将其弹出到一个脚本中,然后通过crontab添加到cron中。我添加的行看起来像这样

55 * * * * sudo /home/jlivin25/bin/myscripts/sync.sh > /var/log/james/cronsync.log 2>&1

我的脚本看起来像这样:

#!/usr/bin/env bash
rsync --protect-args --remove-source-files --chmod=Du=rw,Dgo=rw,Fu=rw,Fog=r -apvzrc pi@192.168.0.10:/media/pi/USBSTORAGE32/ /media/Data_1/"James' Files"/

计划任务无法按预期运行,cron尝试运行脚本但是我的日志文件中记录了以下错误消息:

sudo: no tty present and no askpass program specified

此时我已经陷入困境,因为谷歌搜索'上面的消息我得到了很多不同的理由,我所做的不起作用。我不确定在哪里追逐错误,是我使用cron,ssh还是rsync的问题。

任何帮助都将不胜感激。

littlejeem

1 个答案:

答案 0 :(得分:0)

因此cron很可能是由系统中的用户cron执行的守护程序。当cron守护程序决定运行cronjob时,它会以cron用户身份运行。但很可能cron用户不允许在您的系统中 sudo ,因此这会导致上述 sudo 错误(因为 sudo >通常要求禁止使用密码,但在这种情况下,cron用户没有终端或密码请求程序来获取密码。

确认此方法的一种方法是在脚本开头运行类似env | sort >/tmp/environment.log的内容,并在执行后检查关键变量(例如USERHOME)。您甚至可以将环境与手动执行脚本时的环境进行比较。

我认为这里的方法显然是配置 sudo 以允许cron以“正确”的用户身份运行您的脚本。另一种方法是使您的脚本源(或复制)“正确”用户的某些环境,因此不需要 sudo 。我不知道哪一个对你的目标更有效。