利用 Gitea Doctor自助诊断工具帮助管理员排查问题
我常常在Gitea论坛或者Hostea为网友解答Gitea版本升级方面的问题,但发现少有人知道利用 gitea doctor 命令行工具排查问题,因此这篇博文将给大家带来通俗易懂的介绍。
- 你知道吗?我们现在已经开通了微信公众号和哔哩哔哩视频栏目,欢迎关注、点赞、一键三连!
- 点击链接加入群聊【Gitea 官方技术群】:328432459
什么是 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。
利用 Gitea Doctor自助诊断工具帮助管理员排查问题的更多相关文章
- Java诊断利器Arthas优雅排查生产环境
前言 Arthas 是Alibaba开源的Java诊断工具.在线排查问题,无需重启:动态跟踪Java代码:实时监控JVM状态.对分秒必争的线上异常,Arthas可帮助我们快速诊断相关问题. 下载安装 ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...
- (转)权威支持: 选择正确的 WebSphere 诊断工具
权威支持: 选择正确的 WebSphere 诊断工具 原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0807_supau ...
- ping(网络诊断工具)
ping(网络诊断工具) Ping是Windows下的一个命令,在Unix和Linux下也有这个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可 ...
- 自助BI工具:Tableau和Smartbi的对比(上)
商业智能(BI)和分析平台长期以来一直是商业的重要组成部分,但由于自助BI工具的兴起,在数据科学家和数据库管理员的支持下,分析的责任已经从IT转移到了商业分析师身上. 因此,BI已经从生成月度报告的记 ...
- [转]linux 系统监控、诊断工具之 IO wait
1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap
Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg
生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump文件类似于飞机的黑匣子,记录着生产环境程序 ...
- 阿里云Logtail 快速诊断工具
当日志采集发生异常时,您可以通过Logtail自助检测工具查看客户端是否存在异常情况,根据工具提示快速定位并解决问题. 说明 本工具目前仅支持Linux系统的服务器. 准备工作 下载检测工具脚本. ...
随机推荐
- 这么多房子,哪一间是我的小窝?python采集数据并做数据可视化~
前言 嗨喽,大家好呀!这里是小熊猫 环境使用: (https://jq.qq.com/?_wv=1027&k=ONMKhFSZ) Python 3.8 Pycharm 模块使用: (https ...
- python做小游戏——做个马里奥分分钟解决
一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...
- while循环--和do-while循环
对于循环语句来说他会有一个回上去的箭头,这个回上去的箭头就形成了一个重复做的事情,那种重复做的事情我们就叫做循环 while循环 ~如果我们把while翻译作"当",那么一个whi ...
- linux 运行.sh出现 Permission denied
执行.sh脚本时提示如下错误: [root@Dolen2021 redis]# ./startRedis.sh -bash: ./startRedis.sh: Permission denied [r ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...
- javaweb 01: servlet前言
动力节点杜老师,javaweb最新课程的笔记,假期一直跟着bilibili上的课程在学,放在这里,方便复习 Servlet前言 关于系统架构 系统架构包括什么形式? C/S架构 B/S架构 C/S架构 ...
- 透过Redis源码探究Hash表的实现
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/667 本文使用的Redis 5.0源码 概述 我们在学习 Redis ...
- Webpack学习系列 - Webpack5 怎么集成Babel ?
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要通过实操讲解运用Webpack 5 如何集成 Babel Babel 对于前端 ...
- 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...
- V8中的快慢数组(附源码、图文更易理解😃)
接上一篇掘金 V8 中的快慢属性,本篇分析V8 中的快慢数组,了解数组全填充还是带孔.快慢数组.快慢转化.动态扩缩容等等.其实很多语言底层都采用类似的处理方式,比如:Golang中切片的append操 ...