编辑:更新,以反映一些答案脚本通过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'如何知道使用哪个密码? –