在 CentOS 设置中我有一个如下脚本:
#! /bin/bash
mysqldump --all-databases | gzip > /dumps/sql`date +"%Y-%m-%d-%$
scp `ls -t | head -1` root@backup:/media/storage/backup/
该机器配置了授权的 ssh 密钥,因此不需要密码。如果我运行它(/bin/bash mysql.sh),它会按预期工作,但在 cronjob 中只执行 mysqldump。scp 命令失败。
我该去哪儿修复这个问题?
答案1
听起来好像没有从目录scp
中获取密钥对。试试这个:~/.ssh
env HOME=/path/to/your/home scp -v $(ls -t | head -1) root@backup:/media/storage/backup/ > /tmp/scp.log 2>&1
如果不起作用,请在scp.log
此处发布。
答案2
在许多情况下,由于环境问题,从命令行运行但从 cron 运行不上的脚本会失败。如果您使用 ssh 代理或以其他方式设置 scp 在您的环境中运行所需的信息,则需要在脚本中明确设置它们或获取 .bashrc(或任何设置变量的文件);cron 默认不使用您的 rc 文件,因此您的环境非常简单。
答案3
我认为,首先,您应该检查您的 cron 日志是否有错误,也许您可以在这里复制一小部分日志以便更好地进行故障排除。
您可以尝试使用以下命令更改“日期”命令:
$(日期 +\%F)
然后再次尝试设置 cronjob ;-)