运行命令时,Crontab的行为有所不同

时间:2015-08-11 19:09:55

标签: bash crontab

所以我在覆盆子pi上有这个脚本,它从pi收集信息,包括外部IP地址和本地接口IP地址,并将它们回显到远程pi。 当我手动运行脚本时它工作得很好但是当crontab运行它时,回显我的本地接口IP地址的最后一点不起作用,任何想法为什么?

这是代码。它不像你期望的那么干,我是bash编程的新手,我欢迎任何改进建议

#!/bin/bash
ip2=$(wget -qO- ifconfig.me/ip)
hn=$(hostname)
up=$(uptime)
datetime=$(date +"%Y%m%d-%H%M")
filename="${hn}-${datetime}"


ifaces=()
iface_addr=()
iface_types=("eth" "wlan")
for (( count=0; count<${#iface_types[@]}; count ++ )); do
    iface_type=${iface_types[count]}
    iface_number=$(ifconfig | grep ${iface_type} | wc -l)



    for (( i=0;i<iface_number; i++ )); do
        ifaces+=("${iface_type}${i}")
        ipadd=$(ifconfig | grep -A1 "${iface_type}${i}" | sed -n '2p' | xargs | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | head -1)
        iface_addr+=($ipadd)
    done
done

#Populate File to be sent
echo "$hn $d" > ${filename}
echo "$up" >> ${filename}
echo "External IP: ${ip2}" >> ${filename}
echo >> ${filename}
echo "Local Interfaces" >> ${filename}

for((i=0;i<${#ifaces[@]};i++)); do #This is the part that isnt included when using crontab
    echo "${ifaces[$i]}: ${iface_addr[$i]}" >> ${filename}
done

#Send Fiel TO server
./sctony -f ${filename}

#Place file on log folder
ls | grep wd.d
if [[ $? -eq 0 ]]; then
    mv ${filename} wd.d
else 
    mkdir wd.d
    mv ${filename} wd.d
fi

1 个答案:

答案 0 :(得分:0)

非常感谢Lithis,您的答案被证明是完美的解决方案。通过使用ifconfig命令的完整路径,我可以获得与手动运行相同的结果。