【问题标题】:Cronjob not executing the Shell Script completelyCronjob 没有完全执行 Shell 脚本
【发布时间】: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,但这有点复杂。)

标签: shell cron


【解决方案1】:
  1. 首先尝试简单的选项。捕获标准输出和标准错误,如下所示。这些文件应该指出问题所在。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2021-04-23
    • 2013-08-28
    • 2015-02-16
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多