本主題已經被詳細討論過,但是,我有一個主題變體,我無法破解。現在兩天,並決定平社區。 THx提前閱讀..OSX bash腳本可以正常工作,但在SFTP的crontab中失敗
執行。總結是我有一個在OS X中的腳本,運行良好,手動完成時沒有問題或錯誤執行。當我把腳本放在crontab中,每天運行它仍然運行,但它並不運行所有的命令(特別是SFTP)。
我已閱讀足夠的崗位走下來的環境問題的路徑,所以你會看到下面,我很難引用的路徑問題的情況下SFTP的位置...
唯一我能想到的是IdentityFile。注意:我把這個放在我的用戶的crontab中,而不是root。所以我明白,它應該皮卡在我創建的id_dsa.pub(並且已經與服務器共享)。
我不想做任何時髦的expect命令來繞過密碼,等等。我不知道爲什麼從cron運行時,它跳過了SFTP線。
請參閱下面的代碼..和幫助是極大的讚賞.. THX
#!/bin/bash
export DATE=`date +%y%m%d%H%M%S`
export YYMMDD=`date +%y%m%d`
PDATE=$DATE
YDATE=$YYMMDD
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
FEED="~/Dropbox/"
USER="user"
HOST="host.domain.tld"
A="/tmp/5nPR45bH"
>${A}.file1${PDATE}
>${A}.file2${PDATE}
BYEbye()
{
rm ${A}.file1${PDATE}
rm ${A}.file2${PDATE}
echo "Finished cleaning internal logs"
exit 0
}
echo "get -r *" >> ${A}.file1${PDATE}
echo "quit" >> ${A}.file1${PDATE}
eval mkdir ${FEED}${YDATE}
eval cd ${FEED}${YDATE}
eval /usr/bin/sftp -b ${A}.file1${PDATE} ${USER}@${HOST}
BYEbye
exit 0
您正在爲臨時文件做一件辛苦的工作,用maketmp保持它簡單(http://developer.apple .com/library/mac/#documentation/Darwin/Reference/ManPages/man3/mktemp.3.html) – hmontoliu
'eval'是複雜且危險的,不要在不需要時使用它。在這裏你不需要它,所以刪除它;您確實需要將'FEED =「〜/ Dropbox /」'更改爲'FEED =〜/ Dropbox'。用'A =「$(mktemp)」'替換'A =「/ tmp/some_fixed_name」'。 (這些不是問題的原因。)密鑰上是否有密碼?如果有的話,你如何期待'sftp'獲得它? – Gilles
...另外,爲什麼你使用這個瘋狂的號碼不需要的「eval」命令。我的第一個建議是,你應該簡化你的腳本,刪除多餘或不需要的複雜東西。 – hmontoliu