当 运行 命令时,Crontab 的行为不同
Crontab behaves differently when running command
所以我在 raspberry pi 上有这个脚本,它从 pi 收集信息,包括外部 IP 地址和本地接口 IP 地址,并将它们回显到它 fsends 到远程 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
谢谢 Lithis,事实证明您的回答是完美的解决方案。通过使用命令 ifconfig 的完整路径,我能够得到与手动 运行.
相同的结果
所以我在 raspberry pi 上有这个脚本,它从 pi 收集信息,包括外部 IP 地址和本地接口 IP 地址,并将它们回显到它 fsends 到远程 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
谢谢 Lithis,事实证明您的回答是完美的解决方案。通过使用命令 ifconfig 的完整路径,我能够得到与手动 运行.
相同的结果