2012-02-20 144 views
0

这是来自Hyderabad的Srikanth。Cronjob未完全执行Shell脚本

我在公司的一位Linux管理员。我们有一个鱿鱼服务器,所以我准备了一台备份鱿鱼服务器,这样当LIVE Squid服务器出现故障时,我可以将备份服务器置于实时状态。

我的鱿鱼服务器配置了Centos 5.5。我准备了一个脚本,将LIVE服务器的/ etc/squid /中的所有配置文件备份到备份服务器。即它会将所有文件从Live服务器的/ etc/squid /复制到备份服务器的/ etc/squid/

以下是在/ opt /权限755(rwxr-xr-x)目录中保存为squidbackup.sh的脚本。

#! /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 
     } 
} 

**请注意,这将在备份服务器中执行,该备份服务器将检查脚本中提到的用户。我在现场服务器中创建了一个用户,并在脚本中也给出了相同的用户。

当我使用下面的命令

[[email protected] ~]# sh /opt/squidbackup.sh 

一切正常,到现在执行这个命令,这个脚本下载从目录/ etc /鱿鱼/ LIVE服务器中的所有文件的位置在/ etc /鱿鱼/备份服务器的

现在的问题提出了,如果我设置在crontab中像下面或其他定时

50 23 * * * sh /opt/squidbackup.sh 

不知道什么是错的,它为n下载所有文件。即Cronjob只会从LIVE服务器的/ etc/squid /下载少量文件到备份服务器的/ etc/squid /中。

**当cron执行脚本时,只会下载几个文件,如果我手动运行此脚本,那么它将完全无需下载任何错误或警告即可下载所有文件。

如果您还有其他问题,请继续发布。

现在,如果有任何解决方案可用,我恳请您提供。

请,请提前谢谢。


感谢您的关注。我已经尝试过你所说的,它显示如下,但以前我用它来获得相同的输出到用户的邮件在鱿鱼备份服务器。

即使在cron日志中它也显示相同,但​​我无法理解下面几行中的确切错误。

请注意,只有少数文件使用cron下载。

spawn /usr/bin/scp -r <username>@ServerIP:/etc/squid /etc/ 
<username>@ServerIP's password: 

请检查您是否可以提出其他建议。

+0

什么从的cronjob电子邮件说什么? – Flexo 2012-02-20 13:22:06

+0

您拥有全球可读脚本中的明文形式的用户名和密码。这是一个非常糟糕的想法。你应该设置无密码的ssh;在执行脚本的帐户的'$ HOME/.ssh'目录中创建公钥和私钥,并在远程系统上配置'$ HOME/.ssh/authorized_keys'。建立一个没有密码的私钥是最简单的 - 这意味着私钥文件必须保持安全。 (应该可以使用密码设置私钥,让cron作业使用'ssh-agent',但这会变得有点复杂。) – 2012-02-20 23:31:34

回答

1
  1. 先尝试简单的选项。如下所示捕获stdout和stderr。这些文件应该指出问题所在。

  2. 查看脚本,您需要指定expect的位置。这可能是一个问题。

 
50 23 * * * sh /opt/squidbackup.sh >/tmp/cronout.log 2>&1