解决 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
经验总结
日志往往是我们发现问题的最关键线索,而只有发现了问题的根源,才能彻底解决问题。
所以还是要养成通过日志分析操作步骤的习惯。