你好我的crontab中有趣的行如下所示:(编辑并保存它通过运行crontab -e)
23 * * * * rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
但是..这行什么都不做(第24分钟没有使用带宽,日志文件中没有输出)有谁能告诉我什么是错的?
BTW:通过无密码的pgp密钥validation服务器。 这就是为什么用户需要成为“尼克拉”
编辑:
运行type rsync ,它返回/usr/bin/rsync但已经在path上:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
EDIT2:
创build/ usr / bin / backup包含:
rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
chmod + x'ed它并将chrontab中的条目更改为
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 16 * * * * /usr/bin/backup
仍然…它不工作,虽然/ var / log / syslog sais:
Aug 1 15:16:01 niklas-desktop CRON[9421]: (niklas) CMD (/usr/bin/backup)
请帮忙
EDIT3:
更改
rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
至
/usr/bin/rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
如预期的那样不会改变(不令人满意的)结果。 然而`把回声'xyz'>日志写入日志文件xyz
所以…正如你可能猜测…我的问题仍然没有解决。
添加一个|| echo "rsync died with error code $?" || echo "rsync died with error code $?" 到返回的备份脚本:
rsync died with error code 5
作为http://wpkg.org/Rsync_exit_codesbuild议的意思是“错误启动客户端服务器协议”,所以我想东西是可疑的关于SSH。 再次我使用一个带有密码的pgp密钥,但是这个密码在启动的时候被密钥环默认解锁,所以我可以在不input密码的情况下ssh [email protected]。 是否有可能发送rsync密码的SSH密钥?
把完整的path甚至到你的/ usr / bin /备份 ,所以该文件中的行将启动
/usr/bin/rsync <your other options>
并尝试把一条线
logger -t my_backup Hello from /usr/bin/backup
到你的/ usr / bin / backup脚本,看是否有任何东西被logging到/ var / log / messages(或其他日志文件,取决于你的系统日志设置)。 或者,你可以用logging器replace
echo "Hello from /usr/bin/backup" >/tmp/backuptest
哦,有时SELinux可能会导致你遇到的问题。 它在使用吗?
希望这可以帮助。
编辑 :使你的/ usr / bin /备份rsync行就像
/usr/bin/rsync <your options> || echo "rsync died with error code $?" >> your_log
也许我们将会讨论为什么rsync如此沮丧。
还有一个编辑 :好吧,rsync错误代码5.这意味着
rsync error: error starting client-server protocol
大部分时间都是由于密码错误而发生的,尽pipe消息看起来更加神秘。
如果你手动运行你的rsync脚本作为尼克拉斯,那有效,对吧?
编辑3 :发现你提到关键环节 。 我认为cron在login时不会使用与用户niklas相同的密钥环。 这就是为什么当试图从cron运行时login去p00f。 你可以使用无密码的RSA密钥,而只是限制它运行rsync?
编辑4 :使用RSYNC_PASSWORD环境variables。 这可以通过将其放在备份脚本的顶部来完成:
export RSYNC_PASSWORD="myprecioussssssss"
或者如果您想将密码存储在文本文件中,请创build一个文件并为rsync提供一个–password-file选项。
如果这不起作用,你可以提供-e'ssh -o IdentityFile = / path / to / your_file选项给rsync。
你在你的crontab中包含了一个用户名字段。 但该字段只存在于系统crontab( /etc/crontab )中,而不存在于用crontab -e编辑的每用户crontab中。 所以用crontab -e作为用户niklas编辑crontab,然后制作内容
23 * * * * rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
你运行crontab -e的用户应该收到一封带有错误信息的邮件(抱怨niklas不是有效的命令)。 如果没有,您的邮件设置可能有问题。
您可能需要rsync命令的完整path。
例如,在Fedora 13上,你可以使用/ usr / bin / rsyncreplacersync
在我的情况下(Ubuntu的)创build一个shellcript并把那里的rsync命令,而不是从crontab运行,因为命令做了伎俩。 现在同步工作作为魅力。