让我们仔细看看我们从这次呼叫中得到了哪些数据:
API返回我们的服务器所在的城市、国家和大陆。它还返回大致的纬度和经度坐标,以防我们想要在交互式地图上绘制此服务器。我们将在脚本中使用“纬度”、“经度”、“城市名称”和“国家名称”。*jq命令了解如何处理API数据并提取出这四个字段。
创建脚本以自动执行API调用
我们可以创建一个脚本来获取地理位置数据,并将其写入CSV格式的文件。数据将写入/tmp/目录中名为server_location.txt的文件。打开您最喜欢的编辑器并创建名为geolocate.sh的脚本。插入如下所示的脚本内容,并确保将IP地址替换为您自己的IP地址:
#!/bin/sh
OUTPUT_FILE=/tmp/server_location.txt
# Grab this server's public IP address
PUBLIC_IP=`curl -s https://ipinfo.io/ip`
# Call the geolocation API and capture the output
curl -s https://ipvigilante.com/${PUBLIC_IP} | \
jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | \
while read -r LATITUDE; do
read -r LONGITUDE
read -r CITY
read -r COUNTRY
echo "${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}" | \
tr --delete \" > \
${OUTPUT_FILE}
done
保存脚本并返回终端。通过授予对此文件的EXECUTE权限,使脚本可从终端执行。
chmod u+x geolocate.sh
现在您已经准备好测试它了。运行geolocate.sh脚本并检查输出文件的内容:
./geolocate.sh
cat /tmp/server_location.txt
使用Cron作业每天更新一次地理位置数据
让我们创建一个cron作业,使我们的服务器每天更新其地理位置并将其保存到文件中。每天的cron作业更新服务器的/tmp/文件夹中名为server_location.txt的文件。创建24小时cron作业非常简单,只需将我们的脚本放到/etc/cron.Daily目录中即可。我们必须使用sudo命令以root用户身份复制文件,以避免权限问题。运行以下命令将geolocate.sh复制到/etc/cron.Daily目录。
sudo cp geolocate.sh /etc/cron.daily
这些更改是即时的,我们的脚本将每24小时运行一次,以更新/tmp/server_location.txt文件的内容。我们可以使用这些数据来做一些有趣的事情,比如在地图上绘制我们的服务器,以及将地理位置与交通日志结合起来,以查看我们的服务器热点在世界的什么地方。