【发布时间】:2012-02-20 12:59:53
【问题描述】:
这是来自海得拉巴的 Srikanth。
我是一家公司的 Linux 管理员。我们有一个 squid 服务器,所以我准备了一个 Backup squid 服务器,这样当 LIVE Squid 服务器出现故障时,我可以将备份服务器放入 LIVE。
我的 squid 服务器配置了 Centos 5.5。我准备了一个脚本,将 LIVE 服务器的 /etc/squid/ 中的所有配置文件备份到备份服务器。即它将所有文件从 Live 服务器的 /etc/squid/ 复制到备份服务器的 /etc/squid/
这里的脚本保存为 squidbackup.sh 目录 /opt/ 权限为 755(rwxr-xr-x)
#! /bin/sh
username="<username>"
password="<password>"
host="Server IP"
expect -c "
spawn /usr/bin/scp -r <username>@Server IP:/etc/squid /etc/
expect {
"*password:*"{
send $password\r;
interact;
}
eof{
exit
}
}
** 请注意,这将在备份服务器中执行,该服务器将检查脚本中提到的用户。我在实时服务器中创建了一个用户,并在脚本中给出了相同的用户。
当我使用以下命令执行此命令时
[root@localhost ~]# sh /opt/squidbackup.sh
到目前为止一切正常,此脚本将所有文件从 LIVE 服务器的 /etc/squid/ 目录下载到备份服务器的 /etc/squid/ 位置
现在问题出现了,如果我像下面这样在 crontab 中设置它或使用其他时间设置
50 23 * * * sh /opt/squidbackup.sh
不知道怎么回事,它没有下载所有文件。即 Cronjob 仅将少量文件从 LIVE 服务器的 /etc/squid/ 下载到备份服务器的 /etc/squid/。
** cron 执行脚本时只下载少量文件,如果我手动运行此脚本,那么它将完美下载所有文件,没有任何错误或警告。
如果您还有其他问题,请继续发布。
现在,如果有任何解决方案,我恳请提供。
请,请先谢谢您。
感谢您的关注。我已经尝试过您所说的,它显示如下,但以前我使用在 squid 备份服务器中获取相同的输出到用户的邮件。
即使在 cron 日志中它也显示相同,但我无法从以下几行中理解确切的错误。
请注意,使用 cron 下载的文件很少。
spawn /usr/bin/scp -r <username>@ServerIP:/etc/squid /etc/
<username>@ServerIP's password:
请检查您是否可以提出其他建议。
【问题讨论】:
-
来自 cronjob 的电子邮件是怎么说的?
-
您的用户名和密码以明文形式显示在世界可读的脚本中。这是一个非常糟糕的主意。您应该设置无密码 ssh;在
$HOME/.ssh目录下为执行脚本的账户创建公钥和私钥,并在远程系统上配置$HOME/.ssh/authorized_keys。设置一个没有密码的私钥是最简单的——这意味着私钥文件必须保持安全。 (应该可以使用密码设置私钥,并让 cron 作业使用ssh-agent,但这有点复杂。)