2015-05-13 87 views
1

我在shell脚本中使用以下命令:手动运行,但是当shell脚本不是通过cron的工作,但手动

echo "1" > log.txt 
if [ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 | 
awk {'print $1'}` = 'ipaddress' ] && [ `whoami` = 'userid' ]; then 
echo "2" >> log.txt 
crontab -l > Cron.txt 
echo "3" >> log.txt 
fi 

脚本运行正常时,通过cron的计划,它 stucks在这个IF。

cron entry: 31 11 * * * /home/abc/cron_backup.sh 

产出log.txt的手动运行:打印1,2,3的log.txt通过 的cron:在log.txt的打印1

+0

你如何手动运行你的命令? – Xtof

+0

./cron_backup.sh – shal

+0

你的操作系统是什么? –

回答

0

我建议把你的脚本作为第一线命令解释器行#!确保sh会运行它

之后,你有没有考虑使用双括号语法[[]]?

#!/bin/sh 
echo "1" > log.txt 
if [[ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 | 
awk {'print $1'}` = 'ipaddress' ]] && [[ `whoami` = 'userid' ]]; then 
echo "2" >> log.txt 
crontab -l > Cron.txt 
echo "3" >> log.txt 
fi 
+0

用'#!/ bin/bash'而不是'#!/ bin/sh'更好吗? – Thronghar

+0

谢谢......我包括#!/ bin/sh,但它仍然不能从cron工作。双支架的目的是什么? – shal

+0

由于手动运行时脚本运行成功,因此不应该出现语法问题...正确。我已经尝试了#!/ bin/bash和#!/ bin/sh。还有双括号[[]]。 – shal

0

问题可能出在ifconfig,grep,cut awk和whoami调用。当你从命令行运行它时,你有你的配置文件,它有你的PATH设置。

当它从cron运行时,它没有您的配置文件。如果你修改PATH变量来指向这些程序的位置,那么当你从cron运行时你不会有这种改变。

尝试放入每个命令的完整路径,并看到它从cron运行时会有所不同。

相关问题