rsync代码将运行,但不会在cron中运行
我有一个web服务器(odin)和一个备份服务器(jofur)。在jofur上,我可以运行以下代码将我的web目录(通过密钥验证)从odin同步到jofur:rsync代码将运行,但不会在cron中运行,cron,backup,rsync,Cron,Backup,Rsync,我有一个web服务器(odin)和一个备份服务器(jofur)。在jofur上,我可以运行以下代码将我的web目录(通过密钥验证)从odin同步到jofur: rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin 如果我在命令行中输入此命令,则所有内容都会完全同步: myuser@jofur:~$ rsync -avz -e ssh backups@odin.mydomain.net:/home/
rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin
如果我在命令行中输入此命令,则所有内容都会完全同步:
myuser@jofur:~$ rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin
receiving incremental file list
sent 23 bytes received 1921 bytes 1296.00 bytes/sec
total size is 349557271 speedup is 179813.41
我希望每天早上都能运行它,因此我编辑了我的crontab以阅读以下内容:
0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin
这不管用。以下消息存放在/var/mail/myuser中:
无法创建目录“/home/myuser/.ssh”。
主机密钥验证失败。
rsync:连接意外关闭(到目前为止接收到0字节)[接收器]
rsync错误:io.c(605)[接收器=3.0.9]处的无法解释的错误(代码255)
我不确定这个错误是什么意思。我担心盲目地使用权限,因为我不想让任何后门打开。有什么建议吗 很难判断cron是否使用了错误的rsync二进制文件,或者rsync是否需要一些未在cron中设置的变量。请如下所示设置stdout/stderr,并传递日志文件的输出 另外,尝试从命令行执行“which rsync”;这将从命令行告诉您正在使用哪个rsync 0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin > /tmp/cron_output.log 2>&1 0 4***rsync-avz-e sshbackups@odin.mydomain.net:/home/backups/home/myuser/odin>/tmp/cron_output.log 2>&1 编辑: 您可以创建一个名为SOME_DIR/cron_job_rsync.sh的shell脚本,它包含以下内容。确保设置了执行位 #!/bin/sh /usr/sbin/rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin #!/垃圾箱/垃圾箱 /usr/sbin/rsync-avz-eshbackups@odin.mydomain.net:/home/backups/home/myuser/odin 并修改cronjob,如下所示 0 4 * * * SOME_DIR/cron_job_rsync.sh >/tmp/cron_output.log 2>&1 0 4***某些\u DIR/cron\u作业\u rsync.sh>/tmp/cron\u output.log 2>&1
我也有类似的问题。我的是加密的主目录 如果您的用户已登录,它将在已知的\u主机上工作
但是当它是cron时,cron会使用正确的用户,但它无法访问$HOME/~/.ssh目录,因为它是加密的:-(请按照以下步骤避免错误
我通过与服务器管理员沟通解决了这个问题。以下是他们告诉我的: 为了提高安全性和性能,我们使用1H(Hive),它 为用户、库和二进制文件利用chrooted环境 应复制到chrooted环境中以使其可访问
他们给我发了一封跟进邮件,告诉我“Relevent”软件包已经安装。当时,问题已经解决。不幸的是,我没有从他们那里得到任何其他信息。主机是Arvixe,但我猜使用1H(Hive)的人将遇到类似的问题。希望此答案会有所帮助。使用
rrsync
脚本和专用ssh密钥,如下所示:
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
0 4 * * * rsync -avz backups@odin.mydomain.net:/home/backups /home/myuser/odin
远程服务器
mkdir ~/bin
gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > ~/bin/rrsync
chmod +x ~/bin/rrsync
本地计算机
ssh-keygen -f ~/.ssh/id_remote_backup -C "Automated remote backup" #NO passphrase
scp ~/.ssh/id_remote_backup.pub devel@10.10.10.83:/home/devel/.ssh
远程计算机
cat id_remote_backup.pub >> authorized_keys
在新添加的行前添加以下内容
command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding
所以结果看起来像
command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...vp Automated remote backup
本地的
在crontab
中放入具有x
权限的以下脚本:
#!/bin/sh
echo ""
echo ""
echo "CRON:" `date`
set -xv
rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -avzP devel@10.10.10.83:/ /home/user/servidor
来源:我和你一样也犯了同样的错误 我终于发现用户主目录是一个“挂载点”,当登录时,它发生了变化 您可以使用shell命令“mount”来检查是否有相同的方法使用主目录 所以,我登录并“cd/”,然后 ``` ``` 有可能失败,因为您需要检查${HOME}是否有写入权限,如果没有,请尝试sudo或将可写入添加到${HOME}
在那之后,一切都很好。我做了几个步骤使它工作起来
哪个[命令]
,并将该完整路径用于crontabssh代理和[您的ssh命令]
,以便它可以通过ssh进行连接SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
总之,您的crontab(通过从终端调用crontab-e
编辑)现在应该如下所示:
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
0 4 * * * rsync -avz backups@odin.mydomain.net:/home/backups /home/myuser/odin
背景:事实证明,一些Linux发行版使用密钥环来保护您的公私密钥对-因此密钥对受到密码保护,而从未注意到您。因此,rsync
无法打开您的ssh密钥进行身份验证
注意,我还省略了-esh
;我认为这里没有必要
进一步的故障排除:rsync
没有提供很多调试输出。帮助我识别问题的是在我的crontab中放置了一个更详细的伪scp
命令。用于故障排除的crontab条目可能类似于:
* * * * * scp -v backups@odin.mydomain.net:/home/backups/dummy.txt /home/myuser/odin/dummy.txt >> /home/myuser/odin/dummy.txt.log 2>&1
上面的命令将每分钟运行一次(非常适合开发),它会将一个文件/home/backups/dummy.txt
复制到本地计算机。所有日志(stdout和stderr)都会写入/home/myuser/odin/dummy.txt.log
。检查这些日志以查看错误的确切来源
参考:上面解释的故障排除引导我找到解决方案:嗨,凯文-“哪个rsync”返回:
/usr/bin/rsync
但是当我把它添加到cron命令的末尾时:/tmp/cron_output.log 2>&1
crontab根本无法运行,即使设置为每分钟运行也不行。我知道这一点,因为我将它设置为每分钟运行(****)它会将错误发送到邮件,但如果我将您的代码输入,它不会抛出任何错误,也不会更新输出日志。嗨,凯文-很抱歉延迟。下面是cron_output.log所说的:/bin/sh:1:/home/user/scrip