跳至正文
来自: 首页 » Coder Life » Server » Caddy 更新中断后报错 Segmentation fault 的解决方案

Caddy 更新中断后报错 Segmentation fault 的解决方案

解决 caddy upgrade 执行到一半不动,被终止掉之后,输入什么命令都提示 Segmentation fault 的问题。

TL;DR

cd /usr/bin/ && mv caddy caddy.broken.bak && mv caddy.tmp caddy

前言

平时挺喜欢用 Caddy 来作为反向代理服务器的,轻量、优雅。

但再好的东西也顶不住手欠……

之前就发生过,caddy upgrade 执行到一半不动,被终止掉之后,输入什么命令都提示 Segmentation fault 的问题。上次费半天劲解决完之后,今天又手欠这么干了。赶紧记录下来,省的之后忘,也方便别人搜(毕竟跑遍内外网都鲜有解决方案)。

思路分析

我们先来分析下 caddy upgrade 的执行日志:

[root@development ~]# caddy upgrade
2022/05/10 15:39:13.292 INFO    this executable will be replaced        {"path": "/usr/bin/caddy"}
2022/05/10 15:39:13.292 INFO    requesting build        {"os": "linux", "arch": "amd64", "packages": []}
2022/05/10 15:39:15.068 INFO    build acquired; backing up current executable   {"current_path": "/usr/bin/caddy", "backup_path": "/usr/bin/caddy.tmp"}
2022/05/10 15:39:15.070 INFO    downloading binary      {"destination": "/usr/bin/caddy"}

第四行中提到,将当前的可执行文件进行了备份,从 "/usr/bin/caddy" 备份到了 "/usr/bin/caddy.tmp",然后第五行中说正在下载的二进制文件,下载为了 "/usr/bin/caddy"。

也就是说,现在我们使用的 caddy 命令,是由于被终止更新,导致下载不完全的破损文件。

解决方案 就出来了,只要删除当前下载中的破损文件,把备份了的正常文件恢复回来即可。

即:

cd /usr/bin/ \
&& rm -f caddy \ # 此处可直接删除,也可以先做备份,确认无误后再删除
&& mv caddy.tmp caddy

经验总结

日志往往是我们发现问题的最关键线索,而只有发现了问题的根源,才能彻底解决问题。

所以还是要养成通过日志分析操作步骤的习惯。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据