shell脚本不能通过cron工作但是手动

时间:2015-05-13 06:30:48

标签: bash shell cron

我在shell脚本中使用了以下命令:

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计划时,脚本运行正常 坚持这个IF。

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

log.txt中的输出手动运行:在log.txt中打印1,2,3 cron:在log.txt中打印1

2 个答案:

答案 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 

答案 1 :(得分:0)

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

从cron运行时,它没有您的个人资料。如果你修改PATH变量以指向这些程序的位置,那么从cron运行时你就不会有这种变化。

尝试为每个命令添加完整路径,并查看从cron运行时有什么不同。