​我常常在Gitea论坛或者Hostea为网友解答Gitea版本升级方面的问题,但发现少有人知道利用 gitea doctor 命令行工具排查问题,因此这篇博文将给大家带来通俗易懂的介绍。

什么是 Doctor?

gitea doctor 是 Gitea 程序自带的一个命令行工具,它可以扫描 Gitea 系统工作状况,诊断出常见的故障。这项功能已经发布超过两年了,我们希望借助它让 Gitea 管理员的运维工作变得更加简单。

注意事项

  • 本文基于容器创建的 Gitea 1.17.0 实例进行示范。如果你还没有安装,请参阅文档~
  • gitea doctor 兼容相邻的几个 Gitea 版本,跨越多个版本可能会出现意料之外的问题。
  • 在 Docker 容器中,Gitea 采用有限权限的 git 账号作为程序运行环境。因此当你进入到容器内操作 gitea doctor 前,你需要为当前终端指定账号名称和工作路径,如下所示:
docker exec -it --user git --workdir=/tmp gitea bash

开始使用 Gitea Doctor

如果你想要完整检查整个系统的工况,请确保至少初始化一个仓库。完成操作后再次执行命令:

$ gitea doctor --all

[1] Check paths and basic configuration
- [I] Configuration File Path: "/data/gitea/conf/app.ini"
- [I] Repository Root Path: "/data/git/repositories"
- [I] Data Root Path: "/data/gitea"
- [I] Custom File Root Path: "/data/gitea"
- [I] Work directory: "/app/gitea"
- [I] Log Root Path: "/data/gitea/log"
OK
[2] Check if there is garbage storage files
OK
[3] Check Database Version
OK
[4] Check consistency of database
OK
[5] Check if user with wrong type exist
OK
[6] Check if OpenSSH authorized_keys file is up-to-date
OK
[7] Check if SCRIPT_TYPE is available
- [I] ScriptType bash is on the current PATH at /bin/bash
OK
[8] Check if hook files are up-to-date and executable
OK
[9] Recalculate Stars number for all user
- [I] No check available for User Stars numbers (skipped)
OK
[10] Check old archives
- [I] 0 old archives in repository need to be deleted
OK
[11] Check that all git repositories have receive.advertisePushOptions set to true
- [I] Checked 1 repositories, 0 need updates.
OK
[12] Check for incorrectly dumped repo_units (See #16961)
- [I] Found no broken repo_units
OK
[13] Recalculate merge bases
- [I] All 0 PRs in 1 repos have a correct mergebase
OK
[14] Check git-daemon-export-ok files
- [I] Checked 1 repositories, 0 need updates.
OK
[15] Check if users has an valid email address
- [I] All users have a valid e-mail.
OK

检查结果看起来一切正常,这很好!

Doctor 还可以干什么?

如果把 doctor 类比为 fsck (一款知名的文件系统检查工具),我们可以在不影响软件系统正常工作的情况下进行一些更细致和精确的诊断。打开终端,使用 gitea doctor --list 可以列出所有可用的常规诊断方法:

$ gitea doctor --list
Default Name Title
* paths Check paths and basic configuration
storages Check if there is garbage storage files
* check-db-version Check Database Version
check-db-consistency Check consistency of database
* check-user-type Check if user with wrong type exist
* authorized-keys Check if OpenSSH authorized_keys file is up-to-date
script-type Check if SCRIPT_TYPE is available
hooks Check if hook files are up-to-date and executable
recalculate-stars-number Recalculate Stars number for all user
check-old-archives Check old archives
enable-push-options Check that all git repositories have receive.advertisePushOptions set to true
fix-broken-repo-units Check for incorrectly dumped repo_units (See #16961)
recalculate-merge-bases Recalculate merge bases
check-git-daemon-export-ok Check git-daemon-export-ok files
check-user-email Check if users has an valid email address

例如,我们想检查 OpenSSH 的 authorized_keys 文件是否是最新的,可以运行:

$ gitea doctor --run authorized-keys
[1] Check if OpenSSH authorized_keys file is up-to-date
OK

以上便是,doctor目前可用的全部功能。如果你还想了解它是如何工作的,可以直接切入源码本身,doctor.go 是命令入口点,doctor 目录包含每一项检查的细节,如果你还发现了新的问题解决方法欢迎提交PR。

遇到问题时别担心,即便你不知道如何编写Go程序,我们也欢迎你加入我们的社区一起讨论。

  • 中文QQ群:328432459
  • GitHub Issues(英语,汇聚了世界各地的项目维护者):https://github.com/go-gitea/gitea/issues>
  • 官方论坛(支持中文):https://discourse.gitea.io/c/5-category/5

检查过程不会影响软件工作

Doctor 可以检查系统完整性,并且丝毫不影响正在运行的 Gitea 服务,它会给出以下两种提示:

  • [I] 表示 Information,只是一些常规的信息提醒,可以忽略
  • [W] 表示 Warning,是一些值得注意的问题,但是并不严重

我们可以举个形象的例子,例如首先人为造成破坏,从我们的存储库中删除 hooks 的可执行权限:

chmod -x /data/git/repositories/user/test.git/hooks/post-receive

此时运行 gitea doctor --run hooks,应该会发现问题:

$ gitea doctor --run hooks

[1] Check if hook files are up-to-date and executable
- [W] old hook file /data/git/repositories/user/test.git/hooks/post-receive is not executable

修复问题,使用 gitea doctor --run hooks --fix

$ gitea doctor --run hooks --fix

[1] Check if hook files are up-to-date and executable
- [W] Regenerated hooks for user/test
- [W] old hook file /data/git/repositories/user/test.git/hooks/post-receive is not executable

再次检查:

$ docker exec gitea gitea doctor --run hooks
[1] Check if hook files are up-to-date and executable
OK

以上操作足够修复简单的问题。如果故障仍未解决,我们还可以检查当前工作目录下生成的doctor.log 日志,获得更充足的情报。使用 --log-file - 可以方便地将日志打印到控制台,例如:

gitea doctor --log-file -

更进一步

如果这对您有帮助,欢迎留言评论,通过 Mastodon 可以联系到原作者 dachary。如果你有更好的想法:你可以进入我们的 GitHub 仓库发送一个PR请求来帮助改善 gitea doctor。

最新文章

  1. 使用ajaxfileupload.js实现上传文件功能
  2. java 中多线程的同步函数的运用
  3. 分析移动端APP的网络请求抓包
  4. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果
  5. Oracle常用操作-----(一)
  6. 手把手教你从购买vps到搭建一个node服务器
  7. HTTPS的七个误解
  8. Ajax介绍
  9. yml文件数据的简洁表达方法(Hashes to OpenStruct)
  10. 利用CMake自己创建OpenCV静态链接库
  11. 一天搞定CSS:表单(form)--20
  12. [SDOI2012]Longge的问题
  13. 【评分】Alpha 事后诸葛亮(团队)
  14. 《Python编程》课程报告 python技术在数据分析中的应用之网络爬虫
  15. java工具类POI导出word
  16. 福大软工1816 - 第八次作业(课堂实战)- 项目UML设计
  17. 深圳云栖大会人工智能专场:探索视频+AI,玩转智能视频应用
  18. Yii 简明学习教程
  19. Deepgreen DB简介(转)
  20. Mac安装Tomcat

热门文章

  1. Java递归实现评论多级回复
  2. Python Pygal 模块安装和使用你get了吗?
  3. Codeforces Round #790 (Div. 4) A-H
  4. AI 企业多云存储架构实践 | 深势科技分享
  5. Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
  6. Python 数据科学手册:读书笔记概论
  7. day02 Java_变量
  8. WPS衍生新软件,填补一大缺憾,让office汗颜,Excel用户很开心
  9. led闪烁(时序输入输出,自定义变量,时钟仿真,执行顺序)
  10. Hadoop学习 Hadoop-HA 解释和概念介绍