由于CDN端的访问日志保存期限有限,为了统计访问数据量又确实需要用到CDN上面的记录。
因为有些页面因为启用了缓存的缘故是没有回源的,因此源站的访问日志就没有记录到这些缓存了的访问。
这个想法一直拖到最近才真正的去实现,之前只是觉得可有可无的状态就没有特意去保存。后面的时间是按月去批量下载上一个月的日志(虽然说貌似丢失了相应的下载)。
由于换了新的 CDN 没有找到可视化的下载,只能使用 API 或者是在浏览器下载,加上 API 接口好像不支持跨太多的天数。
于是乎我就决定定时将昨天的日志下载就好了,前期的就手动调天数吧(可以写个循环了咯)。在期间发现说保存三个月的日志按理说应该是90天,但是我在回溯到60多天前的数据时虽然能获取到日志的链接但是在下次时下载链接提示 403 错误。
就当是从今年1月1日起进行保留吧!再之前的就算了毕竟要算起来我都丢了几年的了(没必要的数据)。
这接口调用本来有命令行或者说是对应语言的 SDK 的,但是由于时间加技术的关系就没有使用 SDK 进行而是使用 cli 进行快速的实现。就这样在手动执行能成功放在定时执行就失败的来来回回之中折腾了小半天的时间。
一开始直接 cli 请求返回的是 json 格式的数据,用 shell 进行解析出现了一点困难,就改到 PHP 解析 json 了。我是直接在 PHP 里面使用shell_exec()
的,虽然有些危险但我这时在命令行执行的就默认返回的没有危险吧。
就这样明明手动执行能成功但是放在定时任务里就没有成功且看不到报错日志(技术有限找不到,能看到的CRON日志自己将输出重定向到/dev/null
了),安装面板已有的定时认为使用sudo
确是报提权失败的错误就不折腾这个了。
后来决定在定时任务的脚本里面使用ssh -i xxx root@127.0.0.1 'ls -l'
这样的办法的,也是手动执行成功定时执行失败告终……
甚至发展到在 shell 中获取到 json 后存入到一个临时文件再用 PHP 读取解析后再下载,同样也是定时任务执行失败手动执行成功……
我一开始的思路都在这“定时任务执行失败,手动执行成功”的围绕,都是在寻找这个的解决办法什么环境变量什么什么的。主要是执行定时任务的用户是nologin
我切换不过去甚至都将文件夹权限修改了,每次都是定时任务只能执行成功一半(获取数据那块不能成功)。
后面突然想起貌似没有在对应的用户下配置接口的授权,于是就将当前用户下的复制过去依旧是失败。折腾到最后干脆将对应用户的nologin
修改到bash
之后切换到对用用户。
切换过去之后执行 cli 命令发现直接代码异常,虽然好像没有搜索到最后我干脆删除复制过去的鉴权信息再次手动执行一起初始化重新在当前用户下鉴权。于是乎就这样成功了……
期间也发现了为什么之前的ssh -i xxx root@127.0.0.1 'ls -l'
这种放过是无效,因为该用户下没有对对应的主机“信任”,在我第一次 ssh 时信任了之后ssh -i xxx root@127.0.0.1 'ls -l'
的方式也能执行了。
最后的最后为了减少一些操作我就直接只使用 PHP 命令行获取前日的日志了。
就是不知道 VPS 的那点小硬盘空间也保存多久的日志了?!!!
ChiuYut
2025年01月06日