我在 backup.sh 文件(chmod 775)中有一个脚本:
rsync -e 'ssh -p 31234' -avlz --delete --stats --progress --copy-links [email protected]:/home/admin/rsync /home/myname/rsync/foo/
当我手动调用它时,一切都运行良好(并且我不必输入密码)。但是当我从 cron 调用它时,它不起作用。
我在我的同事(具有与我相同的访问权限)的计算机上使用了相同的设置,并且运行良好。
怎么了?
答案1
我已经设置了无密码 ssh 登录。我使用以下命令:
rsync --delete -auve 'ssh -i /home/red/.ssh/cron_jobs_key' red@othermachine:/source/dir1 /dest/dir2
这里的密钥是“ -i /home/red/.ssh/cron_jobs_key
”,我已在其中设置了无密码的 ssh 登录。否则,当我登录本地计算机时,我必须输入我的 ssh 密钥。我专门为 cron 作业生成了这个 ssh 密钥。
答案2
一些提示:
- 检查您的本地电子邮件(如果您配置了它)。Cron 将通过电子邮件发送计划命令的输出。
- 确保 rsync 在您的 PATH 中。您可以通过在 cron 作业中运行“env”命令或在现有脚本中包含 env 命令来检查这一点。即添加一行:“env > /tmp/env_output.txt”,然后检查该文件。
- 您可以在 crontab 的顶部定义一个 PATH 变量:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
答案3
通过提到您不必输入密码,我假设您使用 ssh-agent 在每个会话中输入一次密码。
这无法从 cron 中工作,因为 cron 无法访问您的 SSH_AUTH_SOCK 变量,因为它是在机器启动时启动的,而不是在您当前会话中启动的。
如果您希望它起作用,您必须使用无密码密钥,这可能就是您的同事正在使用的。