2012-02-20 142 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