2011-11-24 88 views
0

編輯:更新,以反映一些答案腳本通過cron不同的行爲

我有這個劇本,我家的電腦上test.sh:

注:$ USER =約翰

#!/bin/bash 
/usr/bin/scp -q [email protected]:/home/$USER/tmp/$USER /home/$USER/tmp/ > /dev/null 2>&1 
error_code="$?" 

if [ "$error_code" != "0" ]; then #if file NOT present on mysite then: 
     echo "File does not exist." 
     exit 
fi 
echo "File exists." 

現在,可以說我在服務器mysite.com上創建文件,如下所示:

echo > tmp/$USER 

現在,當我運行上面的sc手動在我的桌面上撕下,如下所示:

./test.sh 

我得到結果「文件存在」。

但是,如果我可以通過crontab運行它,我得到的結果「文件不存在」 我的crontab是這樣的:

* * * * * /home/user/test.sh >> /home/user/test.log 2>&1 

我花了一整天來檢查邏輯和一切。 ..我似乎無法弄清楚爲什麼這樣。感謝事先你的幫助:)

編輯:SCP看起來mysite.com:/home/$USER/tmp/ DIR 我的臺式機和服務器上的$ USER是一樣的。所以我不認爲這是一個親緣問題。 如果我

ssh [email protected] 

,然後做

ls tmp/ 

我去看看那裏的文件。

此外,crontab條目位於我的crontab中,而不是其他用戶或root的crontab。

@Jonathan:我設置了基於密鑰的身份驗證。無需密碼!

@netcoder:在我的日誌文件中,我看到「文件不存在」的重複行。

@sarnold:在我的scp系列中,我已經把[email protected],只是爲了確保在crond運行腳本時,cron在mysite.com上使用john的帳戶。仍然是相同的結果。

+1

你試過'scp'(ie:'/ usr/bin/scp')或'/ tmp'的絕對路徑嗎?你用什麼用戶運行cron?什麼是cron的工作目錄? test.log中有什麼? – netcoder

+0

和@ netcoder的問題的附件 - 「/ dev/null」中有什麼?既然它不會告訴你,我建議你在一個文件中捕獲標準輸出和標準錯誤,這樣你就可以看到你需要的信息是否在那裏。例如,'scp'如何知道使用哪個密碼? –

回答

1

我希望問題就在這裏:mysite.com:tmp/$USER - tmp/是相對於當前工作目錄的相對路徑。當您的代碼通過crond(8)執行時,您的cwd可能與手動執行時不同。

作爲@netcoder points out in his comment,絕對路徑是使用crontab(5)文件執行的腳本/程序的最佳方式。

1

在cron下運行時,您的$USER環境變量可能未設置,可能會出現問題。

你可以嘗試添加這樣的事情你的腳本:

echo "User: $USER" > /tmp/crontest.log 

得到cron來運行該腳本後,看看是什麼/tmp/crontest.log

如果什麼都沒有設置你可能想要嘗試這樣的事情:Where can I set environment variables that crontab will use?

相關問題