我正在寻找一些知识来帮助我理解为什么在使用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
答案 0 :(得分:0)
因此cron
很可能是由系统中的用户cron
执行的守护程序。当cron
守护程序决定运行cronjob时,它会以cron
用户身份运行。但很可能cron
用户不允许在您的系统中 sudo ,因此这会导致上述 sudo 错误(因为 sudo >通常要求禁止使用密码,但在这种情况下,cron
用户没有终端或密码请求程序来获取密码。
确认此方法的一种方法是在脚本开头运行类似env | sort >/tmp/environment.log
的内容,并在执行后检查关键变量(例如USER
和HOME
)。您甚至可以将环境与手动执行脚本时的环境进行比较。
我认为这里的方法显然是配置 sudo 以允许cron
以“正确”的用户身份运行您的脚本。另一种方法是使您的脚本源(或复制)“正确”用户的某些环境,因此不需要 sudo 。我不知道哪一个对你的目标更有效。