所以我在覆盆子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
答案 0 :(得分:0)
非常感谢Lithis,您的答案被证明是完美的解决方案。通过使用ifconfig命令的完整路径,我可以获得与手动运行相同的结果。