2013-10-25 162 views
-1

嗨,我写了下面的bash脚本:bash脚本不作为的cronjob工作

cat /home/xyz/wlandiscovery.sh 
#!/bin/bash 


DATE=`date +%d-%m-%Y__%H:%M:%S` 

#Get the current standard interface e.g. eth0 
INTERFACE=`route | grep '*' | awk '{print $8}'` 

#Check if mac is available 
if /usr/bin/arp-scan --interface $INTERFACE -l -r 5 | grep "xx:xx:xx:xx:xx:xx" 
then 
    echo -e "$DATE AVAILABLE!" >> /home/xyz/wlandiscovery.log 
else 
    echo -e "$DATE NOT AVAILABLE" >> /home/xyz/wlandiscovery.log 
fi 

exit 0 

如果我运行这个和MAC可我得到“可用”,如果我断开设备它给“NOT可用“... ...按预期运行。

但是,如果我运行它的cronjob每隔5分钟我总是得到“不可用”:(Debian的系统上)

crontab -e 

#...... 
*/5 * * * * /bin/bash /home/xyz/wlandiscovery.sh 

请告诉我这里的问题?

+2

不需要将'grep'管道到'awk':'awk'/ \ */{print $ 8}''也可以。 –

+0

脚本的权限是什么? – Jhonathan

回答

2
INTERFACE=`route | grep '*' | awk '{print $8}'` 

在我的系统,路线为/usr/sbin/route/usr/sbin很可能不在cron的PATH中。指定完整路径:

INTERFACE=`/usr/sbin/route | awk '$2 == "*" {print $8}'` 
0

比较下列关于你的Mac和Debian机器的命令行输出: 接口= route | grep '*' | awk '{print $8}'

是不是一样的吗?它应该是为了工作。

然后,比较命令行输出: /usr/bin/arp-scan --interface $ INTERFACE -l -r 5 | grep的 “XX:XX:XX:XX:XX:XX”

0

好吧,现在正在工作。似乎在我的终端提示符下,使用crontab的$ PATH不等于$ PATH ...如果我使用/ sbin/route和/ usr/bin/awk和/ bin/grep它可以工作。