Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rsync代码将运行,但不会在cron中运行_Cron_Backup_Rsync - Fatal编程技术网

rsync代码将运行,但不会在cron中运行

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/

我有一个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/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}


在那之后,一切都很好。

我做了几个步骤使它工作起来

  • 检查路径。对于每个命令,您将使用检查
    哪个[命令]
    ,并将该完整路径用于crontab

  • 以您想要运行crontab的用户身份打开crontab,这样它就可以访问该用户的ssh密钥

  • 添加(请记住用户)
    ssh代理和[您的ssh命令]
    ,以便它可以通过ssh进行连接

  • 此时身份验证仍然失败。请尝试生成无密码ssh密钥。这样可以跳过密码提示

  • 为了进行调试,在rsync中将-vvv添加到ssh命令中非常有用。它可以清楚地说明问题所在。

    使用正确的密钥环为我解决了问题。将以下行添加到crontab:

    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