編輯:更新,以反映一些答案腳本通過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的帳戶。仍然是相同的結果。
你試過'scp'(ie:'/ usr/bin/scp')或'/ tmp'的絕對路徑嗎?你用什麼用戶運行cron?什麼是cron的工作目錄? test.log中有什麼? – netcoder
和@ netcoder的問題的附件 - 「/ dev/null」中有什麼?既然它不會告訴你,我建議你在一個文件中捕獲標準輸出和標準錯誤,這樣你就可以看到你需要的信息是否在那裏。例如,'scp'如何知道使用哪個密碼? –