本主题已经被详细讨论过,但是,我有一个主题变体,我无法破解。现在两天,并决定平社区。 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