原文地址:https://daydream.icu/archives/halo-blog-backup-exception
Halo
是一个很强大的一个动态博客搭建平台,可定制化程度非常高,由 java
开发,并且生态逐渐完善,在众多开发者的支持下,主题越来越丰富。<br>在这里向作者致敬;<br>官方网址:https://halo.run/
个人博客网站搭建与维护中,首先要考虑的是数据安全性。个人租的服务器,受厂商因素的影响,服务器的可用性高低不一。即使供应商是大厂,也需要时常对数据进行备份。如果因为服务器崩溃而导致数据的丢失,这是每个用户都不可接受的。经常数据备份是很好的习惯,但也麻烦。在这里,Halo博客网站提供了一个一键备份
功能。
当然了,我希望后面的版本,能够提供自动备份的功能。通过配置git远程仓库的方式,每日自动备份。🤓请原谅我的贪得无厌。
回到主题👇
备份失败
在使用的软件备份的过程中,经常会先下面的这个问题。
接口调用出现问题的话,一般通过服务器后台去查找日志
来定位问题。
而Halo
在1.2
版本后,加了个彩蛋
,在 admin
管理页面中,有个开发这模式,可以在线查看日志,默认是没有开启的,防止不熟悉的用户误操作。
开启开发者模式
在 admin
页面,页面左上角看到有个 Halo
的 Logo
没? 没错,就是那个。
这个图标连续点击 10
下,开启开发者模式。
然后进入,查看日志。
定位问题
通过日志可以看到,报了一个accessDenieExcepiton
的异常。翻译过来是:访问被拒绝
。<br>路径是在/tmp/
下面。
大概可以猜出这与程序本身没什么关系,而是文件io
的权限不够。
一般出现权限问题,是应用部署在非root
用户下,并且没有给出相应的权限。如果你的应用是以root
用户部署的,一般则不会出现这个问题。
这时我们进入服务器后台去查看文件的权限。
查看权限
使用ls -la
命令查看 /tmp/
目录下的所有权限。(直接使用root 用户,避免/tmp/
没有读
的权限)
ls -la
可以看到<span style="color:red">红框</span>中三个文件夹分别对应了admin
的三种备份方式。
在最左的侧有一排字母如:drwxrwxr-x
, 长度为10
,代表着文件的属性,如下图,这里就不展开讲了。有钻研精神的话,可以系统的去学习Linux 系统。
在图片中3
个文件夹第 9
个字符为-
,表示其他用户没有权限进行写入,很显然问题就出在了这里。
我是以halo 用户部署系统的,没有这个文件的写入权限,当将备份的数据写入这个文件下面时,被拒绝导致报错。问题已经找到,下面开放文件的相关权限。
开放权限
有两种方式:
- 将部署应用的用户加入所属权限用户组(上边的图里,用户组的 读、写、执行 的权限是全部开放的)
- 给其他用户开放权限
这里我选择第二种:
在/tmp/文件夹下
输入:
chmod 777 halo-*
如下图所示,即可完成授权;
解释如下:
*
代表 给halo-
开头的所有文件夹授权;
777
:三个7
分别代表给 属主、组、其他用户 授权。
其中:
7
= 4 + 2 + 1 =读 + 写 + 执行<br>6
= 4 + 2 = 读 + 写<br>5
= 4 + 1 = 读 + 执行
权限 | 权限数值 | 二进制 | 具体作用 |
r | 4 | 00000100 | read,读取。当前用户可以读取文件内容,当前用户可以浏览目录。 |
w | 2 | 00000010 | write,写入。当前用户可以新增或修改文件内容,当前用户可以删除、移动目录或目录内文件。 |
x | 1 | 00000001 | execute,执行。当前用户可以执行文件,当前用户可以进入目录。 |
提醒:
- 如果是以其他用户署应用的话,有可能也因为权限问题,连
/tmp/
文件夹都进不去,即使给上面👆的三个文件夹开放权限,备份依旧会报错。因此需要重复上面步骤,给/tmp
文件夹也开放权限。
- 之所以是对
/tmp/
进行操作,是因为在开发者选项的日志中,查看报错的路径是/tmp/**
,如果报错是在其他路径,则修改相应路径的权限。
如果存在问题可以给我留言。
博客地址:https://daydream.icu