Lucien's Blog - 运维
type: channel
link: https://blog.lucien.ink/category/maintenance/
items: Webhook 配置备忘
items: ubuntu 扩容逻辑卷
items: nvidia-persistenced 常驻
items: Debian 初始化命令备忘
items: Debian 使用 systemd 自动挂载 Samba
items: Linux 删除 N 天前的文件
items: 使用 Prometheus + Grafana + Exporter 监控服务器的运行状态

Webhook 配置备忘
type: item
date: 2025-06-06T23:05:18+08:00
description: 本文地址：blog.lucien.ink/archives/552将下列代码保存为 install.sh，然后 bash install.sh。#!/usr/bin/env bash set -e wget 'https://github.mirrors.lucien.ink/https://github.com/adnanh/webhook/releases/download/2.8.2/webhook-linux-amd64.tar.gz' tar -xzvf webhook-linux-amd64.tar.gz mv webhook-linux-amd64 /usr/local/ cat << EOF > /etc/systemd/system/webhook.service [Unit] Description=Webhook server After=network.target [Service] Type=simple ExecStart=/usr/local/webhook-linux-amd64/webhook \ -nopanic \ -hooks /etc/webhook/hooks.yaml \ -hotreload \ -logfile /var/log/webhook/webhook.log \ -port 9000 Restart=on-failure User=root Group=root [Install] WantedBy=multi-user.target EOF systemctl enable webhook mkdir -p /etc/webhook/scripts cat << EOF > /etc/webhook/hooks.yaml - id: test execute-command: "/etc/webhook/scripts/test.sh" command-working-directory: "/root/" trigger-rule: match: type: value value: Bearer change-this parameter: source: header name: Authorization EOF cat << EOF > /etc/webhook/scripts/test.sh #!/usr/bin/env sh echo foo > bar EOF chmod +x /etc/webhook/scripts/test.sh mkdir -p /var/log/webhook systemctl start webhook curl 'http://localhost:9000/hooks/test' -H 'Authorization: Bearer change-this'

ubuntu 扩容逻辑卷
type: item
date: 2023-10-14T00:53:53+08:00
description: 本文地址：blog.lucien.ink/archives/543Ubuntu 22.04 LTS 在安装过程中默认只使用 100G 的硬盘，执行以下命令即可扩容：$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-ubuntu--lv 100G 11G 89G 11% / $ lvdisplay --- Logical volume --- LV Path /dev/ubuntu-vg/ubuntu-lv LV Name ubuntu-lv VG Name ubuntu-vg LV Write Access read/write LV Creation host, time ubuntu-server, 2023-10-11 10:53:11 +0000 LV Status available # open 1 LV Size 100 GB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 512 Block device 253:0 $ lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv $ resize2fs /dev/ubuntu-vg/ubuntu-lv $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-ubuntu--lv 3.5T 11G 3.3T 1% /

nvidia-persistenced 常驻
type: item
date: 2023-09-13T01:30:21+08:00
description: 本文地址：blog.lucien.ink/archives/542发现每次执行 nvidia-smi 都特别慢，发现是需要 nvidia-persistenced 常驻才可以，这个并不会在安装完驱动之后自动配置，需要手动设置一个自启。cat <<EOF >> /etc/systemd/system/nvidia-persistenced.service [Unit] Description=NVIDIA Persistence Daemon Wants=syslog.target [Service] Type=forking ExecStart=/usr/bin/nvidia-persistenced ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start nvidia-persistenced systemctl enable nvidia-persistenced

Debian 初始化命令备忘
type: item
date: 2023-09-13T01:21:21+08:00
description: 本文地址：blog.lucien.ink/archives/541以 Debian 11 为例，主要用于备忘。deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-freeapt update && apt install vim curl wget git cifs-utils -y export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" curl -fsSL https://get.docker.com/ | sh pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple hostnamectl set-hostname your_host hostname your_host /etc/hosts timedatectl set-timezone Asia/Shanghai groupmod -g 3000 foo # 添加用户组 adduser # 添加用户 usermod -aG group_name user_name # 将用户添加至组

Debian 使用 systemd 自动挂载 Samba
type: item
date: 2023-08-29T01:11:00+08:00
description: 本文地址：blog.lucien.ink/archives/540写成了一键脚本，直接执行即可。需要注意的是，挂载的路径和 systemd service 的名字要对应上，比如挂载的路径为 /mnt/nas 那 service 的文件名应为 mnt-nas.service。#!/usr/bin/env bash SERVER="nas.local" USERNAME="foo" PASSWORD="bar" apt install cifs-utils -y groupadd -g 17510 nas cat <<EOF > /etc/systemd/system/dns-ready.service [Unit] Description=Wait for DNS to come up using 'host' After=nss-lookup.target [Service] Type=oneshot ExecStart=/bin/bash -c "until host ${SERVER}; do sleep 1; done" [Install] WantedBy=multi-user.target EOF cat <<EOF > /etc/systemd/system/mnt-nas.mount [Unit] Description=Mount NAS Requires=network-online.target After=network-online.target dns-ready.service [Mount] What=//${SERVER}/Data Where=/mnt/nas Type=cifs Options=username=${USERNAME},password=${PASSWORD},dir_mode=0775,gid=nas,rw,file_mode=0664 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start dns-ready.service systemctl enable dns-ready.service systemctl start mnt-nas.mount systemctl enable mnt-nas.mount

Linux 删除 N 天前的文件
type: item
date: 2019-05-26T13:04:00+08:00
description: Linux 删除 N 天前的文件原文地址：https://www.lucien.ink/archives/452/1. 起因我在使用宝塔面板的定时备份的过程中，发现在备份文件目录的时候无法成功清理旧的备份，导致 OSS 的体积暴增 120G ，然而连续额外扣费 4 个月之后我才发现这一问题。钱包表示它瘦了。在宝塔的官方交流群里反馈这个问题，并没有人鸟我，遂自行想办法解决这个问题。2. 解决先将 OSS 挂载到本地，使其成为本地文件系统的一部分，然后用 find 命令找出 N 天前的文件，删除之。比如我每天备份一次，保留近 $7$ 次备份，OSS 的挂载目录是 /oss，于是我添加了一个定时命令：find /oss/bt_backup -mtime +6 -name "*.tar.gz" | xargs -I {} rm -rf {}意思就是删除 /oss/bt_backup 目录下所有最近更改时间超过 $6$ 天的文件。

使用 Prometheus + Grafana + Exporter 监控服务器的运行状态
type: item
date: 2019-05-25T16:24:00+08:00
description: 使用 Prometheus + Grafana + Exporter 监控服务器的运行状态原文地址：https://www.lucien.ink/archives/449/1. 摘要本文主要介绍如何使用 node_exporter 采集 Linux 系统的信息，借助 Prometheus 最终以仪表盘的形式显示在 Grafana 中。2. 效果展示3. 介绍Grafana、Prometheus、Exporter 这三个组件的背景资料我就不介绍了，搜一下就会有很多。这里主要说一下他们三者之间的关系。3.1 前置知识在编写应用程序的时候，通常会记录 Log 以便事后分析，在很多情况下是产生了问题之后，再去查看 Log ，是一种事后的静态分析。在很多时候，我们可能需要了解整个系统在当前，或者某一时刻运行的情况，比如当前系统中对外提供了多少次服务，这些服务的响应时间是多少，随时间变化的情况是什么样的，系统出错的频率是多少。这些动态的准实时信息对于监控整个系统的运行健康状况来说很重要。于是就产生了 metrics 这种数据，它长这样 https://monitor.lucien.ink/metrics 。3.2 关系Exporter 的主要任务是提供 metrics 信息。而 metrics 大多数人是看不懂的，所以 Prometheus 为这种格式的信息提供了 Prometheus Query Language (PromQL) ，可以进行一些类似数据库那样的联合查询、过滤等操作，这样一来就能提炼出我们想要的东西，类似于内存占用、负载等。大致的流程就是：从远端（可以有多个）采集 metrics 信息到本地 $\rightarrow$ 通过各种 QL 提炼信息。虽然 PromQL 非常的强大，但是对于大部分人来说是有很高的学习成本的，所以 Grafana 就将各种 PromQL 封装起来，并将 PromQL 的结果以图表的形式展示出来。大概就是 生产 $\rightarrow$ 加工 $\rightarrow$ 二次加工 这样一种流程。当然了，Prometheus 和 Grafana 的功能远不止如此，更强大的是报警功能，但这不是本文的主题。3.3 Exporter值得一提的是，Exporter 组件是一类组件，它们的主要作用就是提供 metrics 信息以供加工提炼。有的组件会自行提供 metrics 信息，比如 Grafana、Prometheus、Etcd 等等，在本文的 $3.1$ 中给出的 metrics 就是 Grafana 本身产生的。有的组件不会提供 metrics 信息，比如说我们自己写的一些程序。而有的甚至不是组件，比如 Linux 系统本身。4. 部署本文采用的安装方式皆为二进制 + systemd 托管的安装方式，因为 OpenVZ 等架构的 VPS 不能运行 docker，所以选择更普适一些的方法。4.1 下载node_exporter：https://github.com/prometheus/node_exporter/releasesPrometheus：https://github.com/prometheus/prometheus/releasesGrafana（选择 Standalone Linux Binaries 版本）：https://grafana.com/grafana/download4.2 解压、安装新建一个空文件夹，并将下载的 tar.gz 移动至这个空文件夹中。请保证以下目录结构：dir ├── grafana-x.x.x.linux-amd64.tar.gz ├── node_exporter-x.x.x.linux-amd64.tar.gz └── prometheus-x.x.x.linux-amd64.tar.gz然后在文件夹中执行：curl api.pasteme.cn/8413 | bash可以在 https://pasteme.cn/8413 中查看命令详情。至此，所有安装已经完成了，三个组件对应的 systemd 服务名称分别是：grafana-server、prometheus、node_exporter。4.3 验证4.3.1 systemctl status xxx可以用 systemctl status 命令来查看各个组件的运行状态。systemctl status node_exporter systemctl status prometheus systemctl status grafana-server4.3.2 查看 metricsnode_exporter、Prometheus、Grafana 的默认端口分别是 9100、9090、3000 ，我…