macOS 上的清理工具整理合集

最近 macOS 系统磁盘空间告急,之前就出现过因为磁盘空间不足导致系统卡顿还出现突然黑屏的状态,所以这次就看到还剩余几十个 GB 的时候就开始清理工作了。清理的同时顺便就整理一下常用的几个清理工具。

如何发现大文件

在清理之前首先要对本地磁盘文件做一个整体的了解,虽然 macOS 自带一个存储管理的查看面板,但是实在是太简陋,也只能提供非常简单地查找大文件的工具。

A14X

比如说从系统提供的 Storage 预览中能看到 Documents 占用的空间最多,可以点开后面的圆形 i 图标,可以看到其中占用空间很大的几个文件。

ACei

比如说对于我,就是我安装的两个虚拟机占用了比较多的空间,但这也是预想之内的。

gdu

上面的方式只能找出来系统中的大文件所在,如果我想知道每一个文件夹所占用的空间大小,我之前的文章中介绍过gdu ,这个时候就派上了用场。

brew install gdu

然后直接对想要统计的目录运行 sudo gdu ~/

ARx8

几款 macOS 上的清理工具

  • [[Clean My Mac]] 收费软件
  • [[Pretty Clean]] 免费
  • [[App Cleaner]] 免费,卸载应用
  • [[Clean Me]] 清理磁盘

Pretty Clean

PrettyClean 是一款 macOS 上的免费清理工具,界面非常简单。

AW10

App Cleaner

App Cleaner 是一款可以用来快速卸载应用以及应用相关残留文件的应用,非常小巧,但是非常强大。

AdJ6


2023-06-10 macos , cleanup , mac , gdu , linux , disk-space

使用 Listmonk 搭建自己的 Newsletter

listmonk 是一个开源的,使用 Go 语言编写的,自托管的邮件列表订阅应用。目前已经在 GitHub 收获了超过 10000 颗星星,listmon 速度非常快,功能丰富,并且可以直接打包成一个二进制文件,和 PostgreSQL 数据库一起使用。

借助 listmonk 可以非常快速的搭建属于自己的 Newsletter,Newsletter 是一种基于邮件的时事通讯,企业或组织可以通过邮箱给其成员,客户,员工或其他订阅者发送活动的新闻及广告营销的方式,但最近也逐渐成为个人出版、自媒体的流行订阅形式,相比 RSS,它更加自主,有更好的阅读体验,并且可以有更灵活的付费方式。

特性:

  • 支持公共列表和私有列表
  • 只依赖 [[PostgreSQL]]
  • 拥有管理面板
  • 基于 Go 的模板、支持 WYSIWYG 编辑器
  • 多线程,多 SMTP 邮件队列,用于快速投递邮件
  • HTTP,JSON API
  • 点击和视图追踪
  • 支持导入 [[MailChimp]] 和 [[Substack]] 的订阅用户

安装

具体的 docker-compose 可以看这里,listmonk 需要依赖一个配置文件,我一般习惯直接放在 HOME 目录中

git clone [email protected]:einverne/dockerfile.git
cd dockerfile/listmonk
cp env .env
# edit .env
# create config.toml
vi ~/listmonk/config.toml

然后填入一下内容。注意将配置文件中的内容填写,比如用户名和密码,数据库连接方式替换为自己的内容。

[app]
# Interface and port where the app will run its webserver.
address = "0.0.0.0:9000"
admin_username = "username"
admin_password = "password"

# Database.
[db]
host = "host"
port = 5432
user = "listmonk"
password = "pass"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 25
max_lifetime = "300s"

当添加完配置文件之后,就可以使用 docker-compose up -d db 来启动数据库了,但是 listmonk 应用不回初始化数据库 Schema,所以还需要进行初始化数据库操作。

docker-compose run --rm app ./listmonk --install

等初始化数据操作完成,可以通过进入 PostgreSQL 容器查看表结构来验证。

docker exec -it listmonk_db /bin/bash

psql -d listmonk -U listmonk -W
\dt

最后就可以启动应用 docker-compose up -d

自定义静态模板文件

这部分内容已经在我上面提及的 docker-compose.yml 文件中存在。

  app:
    <<: *app-defaults
    container_name: listmonk_app
    depends_on:
      - db
    command: "./listmonk --static-dir=/listmonk/static"
    volumes:
      - "${LISTMONK_CONFIG}/config.toml:/listmonk/config.toml"
      - "./static:/listmonk/static"

导入外部订阅用户

加入已经在 [[MailChimp]] 或者 [[Substack]] 上有一定的订阅用户,那么可以通过后台工具导入 csv 文件。但需要注意的是,导入的用户默认状态是 Unconfirmed,所以需要进入数据库手动更新用户的状态。

docker exec -it listmonk_db /bin/bash
psql -d listmonk -U listmonk -W

输入密码登录数据库,然后执行 \dt 查看表。然后查看表内容

SELECT * from subscriber_lists;

然后更新所有人

UPDATE subscriber_lists SET status='confirmed' WHERE list_id=4;

设置 SSL

默认情况下 listmonk 运行在 HTTP,不提供 SSL,我们可以借助 Nginx 和 Let’s Encrypt 来生成证书提供更安全的访问。

有很多种方式可以完成

之前好几篇文章也介绍过 HestiaCP 面板中的模板文件,所以这里就简单再总结一下。

首先与进入 root 账户 sudo su -

然后进入如下的目录

cd /usr/local/hestia/data/templates/web/nginx/php-fpm/

这个目录中包含了 HestiaCP 默认的 Nginx 模板。

cp default.tpl listmonk.tpl
cp default.stpl listmonk.stpl

然后分别修改这两个新生成的 listmonk 配置文件。

将其中 location 部分修改

    location / {
        proxy_pass  http://localhost:9001;
        proxy_set_header    Host                $http_host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    }

然后最好把 stpl 文件中的 proxy_hide_header Upgrade; 删除。

再进入 HestiaCP 管理后台,创建用户,然后创建网站,填入域名。创建域名进入高级管理,在 Web Template(Nginx)中选择刚刚创建的 listmonk,保存。然后在高级设置中,配置 SSL,等待获取证书,保存之后就能通过域名来访问 listmonk 了。


2023-06-09 newsletter , listmonk , email , email-server , email-service , docker , postgresql

macOS 自定义系统设置记录

因为电脑空间告警,所以用 Clean Me 这个应用对系统进行了一次清理,没想到的是,可能在我误操作的情况下把我系统的设置和全部软件的设置都给清空了。我所有的系统配置都恢复了初始的状态,让我使用起来非常变扭,我在之前有写过一篇 MacBook 初始化和应用安装 的文章,但是那篇文章写的比较啰嗦,索性就重新整理一下。

下面的内容会按照常用的功能来划分。

Keyboard

首先在 Input Sources 中添加 Rime 输入法。

Touch Bar 设置成默认 Fn 键

Touch Bar shows -> F1, F2, etc. Keys

在 Shortcut 中将 Spotlight 的快捷键取消,因为我使用 [[Raycast]]。

Desktop & Dock

  • Reduce size
  • Automatically hide and show the Dock

在设置 Desktop & Dock 设置的时候看到了一个新的设置 Stage Manager,查了一下是 macOS 最早在 iPad 上引入的多窗口管理方式。

Stage Manager 基本是一个单窗口模式,点击一个应用就会集中到该窗口上,其他的应用会被移动到左边。用户可以将应用拖入到当前的工作区中,然后形成多个应用窗口的组合。

说实话我不知道 Apple 在 macOS 桌面版引入这样的窗口管理模式的目的,只是为了配合 iPad 触摸屏的操作方式?虽然我承认 macOS 上的窗口切换本来就有很多问题,我是通过


2023-05-21 macos , macbook

EV Hosting 共享邮件服务

过去的一个月里面 EV Hosting 陆陆续续更新了共享主机服务域名注册服务,现在因为我自己使用域名邮箱一直也在使用域名邮箱,所以现在也推出了域名邮箱服务。

很早之前就想给自己的网站弄一个自定义的域名邮箱发发验证码,邮件通知之类的,就了解了一下域名邮箱的服务。我自己之前就尝试过国内的一系列的域名邮箱,但后来这种限制(绑定电话,限制发件)就不再使用了,之前的网站我是自己注册了一个 Gmail SMTP 发件,虽然没遇到什么大的问题,但 Gmail 还是有一些发件限制的(每 24 小时不能超过 500 封)一旦超过,可能 Gmail 收发件都会收到影响。另外我还调研  了其他的一些邮件发送服务,但是最开始的时候,我就没有想使用大公司的服务(虽然 AWS 好像提供一个月上万的邮件发送额度,我还是没有考虑)。中间还考虑过自建域名邮箱  Mailu, Mailcow  对于接受邮件来说没有任何问题,但是对于发信来说,还是依赖于服务器的 IP 地址的权重,所以最后我还是将发信迁移到了  MXRoute,我体验了一段时间之后觉得不错,所以也申请了一个转售,现在在  这里  购买使用 EV_MAIL 折扣码可以获得 6 折优惠,最低 30 元一年。后台使用的 DirectAdmin 面板,购买后配置几条 DNS 记录就能直接开始用了。注意不要发送垃圾邮件。另外每小时发送 300 封的限制只存在每个邮箱,也就是注册邮箱,通知邮箱可以单独开来以提升发件的限制,这对于我来说以及完全足够了。

体验套餐

为了让大家快速体验这个域名邮箱托管服务,现在设置了一个体验套餐 只需要 15 元就可以购买入门的套餐,包含 250 MB 空间,一个域名,一个子域名,每个邮箱可以享受每小时 300 封邮件的发信。

使用教程

共享的域名邮箱服务由 [[MXRoute]] 提供服务,使用 [[DirectAdmin]] 控制面板,在购买之后会收到一封叫做「您的自定义域名邮箱帐号信息」其中包含了使用该邮箱的具体信息。

使用自定义域名邮箱一般需要设置几条 DNS 记录。

  • [[MX 记录]],用设置接受邮件的路由
  • [[SPF]] 记录,SPF 让域名所有者可以授权允许发送其域名邮箱的 IP 地址。用来防止其他人伪装你的域名。
  • [[DKIM]] 记录,允许发送者通过在邮件 header 中包含一段数字签名来鉴定其邮件。DKIM 使用公钥加密来确保邮件内容是从权威邮件服务器发送的。
  • [[DMARC]] 记录,防止伪装邮件的 From

所有具体的配置教程 可以参考 EV Hosting 的知识库 所有配置的详情都可以从收到的邮件中获得。

当完成配置之后,就可以在 DirectAdmin 界面中创建邮箱,然后进行邮件的收发了。


2023-05-20 ev-hosting , email-hosting , shared-web-hosting , directadmin , clientexec

《非暴力沟通》读书笔记

怎么知道的这一本书

在写这篇读书笔记的时候去豆瓣看了一眼,我才发现我已经将这一本书加入待看列表,将近 10 年了,早已经忘记了当时是怎么知道的这一本书,又是为何把这本书加入到了待看清单。

9vj8

关于作者

几句话总结书的内容

什么是暴力

在进入《非暴力沟通》之前要先了解什么是暴力,认识暴力,有助于理解非暴力。

我们常常认识不到自身的暴力,常常以为只有打人、鞭挞、杀人以及战争才算是暴力。相比于身体上的暴力,造成精神伤害的,那就是「隐蔽的暴力」。而隐蔽的暴力往往更加伤害更大。

什么是非暴力

非暴力主张积极进取,而非消极无为。

非暴力意味着让爱融入生活。让尊重、理解、欣赏、感激、慈悲和友情,而非自私自利、贪婪、憎恨、偏见、怀疑和敌意,来主导生活。

非暴力生活的关键就是感激生活的赐予,而不贪心。

什么是非暴力沟通

非暴力沟通让我们转变谈话和聆听的方式。

四个要素(表达自己):

  • 观察,清晰表达观察结果,区分观察和评论
  • 感受,表达感受,区分感受和想法
  • 需要,感受的来源
  • 请求,提出请求
    • 明确告诉对方希望他们做什么,用具体的语言
    • 区分请求和命令

区分观察和评论

  • 观察,特定时间地点和情境,清晰的结果
  • 评论要基于特定时间和环境

区分感受和想法

当我们说「我觉得」,常常并不是在表达感受,而是在表达想法。

  • A 想法,我觉得我吉他弹得不好
  • B 感受,作为吉他手,我有些失落

建立表达感受的词汇表。

  • 满足:兴奋、喜悦、欣喜、感激、感动、乐观、开心、高兴、愉快、陶醉、满足、欣慰、平静、自在
  • 不满足:害怕、担心、焦虑、忧虑、着急、紧张、忧伤、沮丧、灰心、气馁、邪气、绝望、伤感、恼怒、不高兴

一旦人们开始谈论需要,而不是指责对方,就可能找到办法来满足双方的需要。

  • 自由选择 Autonomy
    • 选择梦想/目标/方向,自由制定计划来实现这些梦想
  • 庆祝
    • 庆祝生命的创造力以及梦想的实现
    • 纪念人生的失落
  • 言行一致
    • 真诚、创造、意义、自我肯定
  • 滋养身体
    • 空气、食物、运动
  • 玩耍
  • 情意相通
  • 相互依存

区分请求和命令

请求和命令的区别在于,请求没有满足时,提出人如果批评和指责,那就是命令

倾听

如果一个人想要别人了解他的处境,听到的却是安慰和建议,那么就有可能觉得不舒服。

启发或想法

就像在看新闻的时候去区分事实和观点一样,看完这一本《非暴力沟通》,我对书中阐述的非暴力沟通四要素倒是没有太多的关心,但是作者在行文过程中将影响这四个要素的一些细微的差别说了出来。区分观察和评论,区分感受和想法,区分请求和命令

  • 不要进行「道德判断」,用自己的标准(价值观、信念)来衡量和要求别人
  • 不进行比较
  • 不要「回避责任」
  • 不要「强人所难」,要求和命令别人

谁应该看这本书

不懂得如何表达的人。

印象深刻的句子

  • 如果一个人选择新的生活,是为了追求幸福,而非为了逃避惩罚,那他的行为就符合所有人的利益。
  • 批评往往暗含这期待。对他人的批评实际上间接表达了我们尚未满足的需要。

2023-05-18 reading , reading-2023 , reading-2023q2 , psychology

Drift 一个开源可以自托管的 Gist

Drift 是一个可以自行架设的 Gist 代替。使用 [[Next.js]] 13 和 React Server Components 编写。

Drift 发布了一个官方的 Demo

分享的文件页面内容

特性

  • 支持 GitHub 扩展的 Markdown 渲染
  • 支持用户登录,可以使用 GitHub OAuth
  • 支持公开的,私有的,密码保护的内容
  • 语法高亮和代码语言检查
  • 拖拽的文件上传

安装

目前官方还没有发布编译好的 Docker 镜像,需要自己编译部署。但是也非常简单。

拉取官方的代码

git clone https://github.com/MaxLeiter/Drift.git
cd Drift
docker-compose build

目前为止因为项目还在开发过程中,编译过程可能会出现一些问题。

编译完成直接运行下面的命令即可。

docker-compose up -d

2023-05-16 self-hosted , open-source , nextjs , react , typescript , docker

Google Analytics 代替产品对比

虽然我把其他服务陆陆续续从 Google 迁移出来,但 Google Analytics 一直都运行良好所以也没有怎么管,但 Google Analytics 到今年年中的时候会强行升级 GA4,看了一下升级的过程和 Google Analytics 的操作实在太复杂,就诞生了迁移出 Google Analytics 的想法。简单地了解了一下目前的 Google Analytics 的代替品,收费的,自行架设的还很多选择。这篇文章就简单地对比一下。

主要还是分成两个部分来划分搜罗的产品,可以自行托管的,和商用的。看过我之前文章的小伙伴应该知道,我个人会偏向于开源,可自行托管的服务。即便这个服务还在初始阶段可能还比不上某个商业化的服务,但我依然会选择开源的那个,比如我会选择 [[Wallabag]] 更甚于 [[Pocket]] 和 [[Instapaper]],我会选择 [[miniflux]] 更甚于我过去常常推荐的 InoReader。如果实在找不到合适的开源的,我会优先选择数据归属权在于个人的服务(比如数据不联网,存在本地,可以使用纯文本或有格式的类型导出数据),比如 Obsidian 更甚于 [[Notion]] 和 [[Roam Research]] 以及一切基于网页的笔记应用。

可 Self-hosted:

  • [[Matomo]] (PHP + MySQL)是一款 PHP 开发的流量监控工具,报表功能比较强大.
  • [[Umami]] TypeScript + MySQL/PostgreSQL
  • [[Plausible]] plausible analytics Elixir 开发的小巧的流量监控平台.
  • [[Fathom Analytics]] Go + JavaScript
  • [[shynet]] Python
  • [[Ackee]] Node.js, JavaScript, SCSS
  • [[uxwizz]] PHP+MySQL

不可自架,闭源

  • [[Splitbee]] 被 Vercel 收购,即将关闭,过去调研的时候曾经用过一段时间,体验确实不错,界面非常简洁,但是被收购之后就被整合到了 Vercel
  • [[Tiny Analytics]]
  • [[Smatlook]]
  • Simple Analytics

下面就重点介绍一下我准备去试试的几个服务。

Umami

Umami 是一个可以自托管的数据统计服务,可以用来代替 [[Google Analytics]]。 “Umami”,源于 “Umai”,在日语里是“美味、鲜味”的意思。

92m2

Matomo

Matomo (原名 Piwik)是一款使用 PHP 编写的网站访问统计分析工具,开源,可自行架设,可以很好的代替 [[Google Analytics]] ,Matomo 使用 PHP 和 MySQL 实现,已经被超过 100 万网站所使用 。

Matomo 非常强大,并且只需要一来 PHP 和一个数据库,并且其报表分析非常强大。

  • 支持根据用户访问的 IP 来查询地理位置
  • 支持各种类型的表报

matomo

Fathom

Fathom Analytics 是一个 [[Google Analytics]] 的代替。Fathom Analytics 是一个基于加拿大的团队推出的服务。

Fathom Analytics 是一个官方推出的 SaaS 平台,是一个收费的商业服务。如果不想使用官方的,也可以利用 Fathom Lite 自己搭建服务。

Fathom Lite 主要是使用 Go 语言 和 JavaScript 编写。Fathom Lite 和 Analytics 的区别可以参考这里

9s9M

Plausible

Plausible 是一个简单的 [[Google Analytics]] 代替。Plausible 是使用 [[Elixir]] 语言编写的,我最早知道这个服务是在 Twitter 上偶然之间看到了创始人分享如何想要找到一个 Google Analytics 代替,然后自己做,最后到如何打造成为一个 SaaS 产品,支撑自己的全部生活的成功故事。

9niG

shynet

shynet 是一款使用 Python 编写的网站流量分析工具。

99pI

Ackee

Ackee 是一个关注隐私的开源(基于 MIT 协议)网页分析工具,采用轻量级的 Node.js 和 MongoDB 架构,接口使用 [[GraphQL]]。

Ackee 界面简洁美观,采用匿名数据采集的方式,分析你网站的流量并在最小的界面中提供有用的统计信息。对于不需要像 Google Analytics 或 Matomo 这样的全功能营销分析平台的个人来说,是一款非常不错的工具。

9A24

总结

除了浏览了一下官网和 GitHub 页面,没有对这些产品更进一步的了解了,但是我个人感觉 Umami 还不错,页面简洁,功能也满足我的使用。然后后端数据库支持 PostgreSQL 和常用的 MySQL,并且浏览了一下帮助文档,发现还支持 PlanetScale ,并且资源消耗也比较小,所以立马 Docker 搞起,创建数据库连接字符串,然后直接拉取镜像就能起来,配合 HestiaCP 申请一个 SSL 证书很快就搞定了。


2023-05-13 google-analytics , google , plausible , matomo , umami , fathom

自建 IT tools 一系列常用工具集

it-tools 是一个使用 [[Vue.js]] 和 TypeScript 编写的常用 IT 工具的集合。

集成工具

it-tools 项目中集成了如下的工具:

密码相关

  • Token generator
  • Hash text, 包括了 MD5,SHA256 在内的 8 种 Hash
  • Bcrypt
  • UUID
  • Encrypt / decrypt text
  • BIP39 passphrase generator
  • Hmac generator
  • RSA key pair generator

转换

  • 日期时间转换
  • 进制转换,二进制,八进制,十进制,十六进制
  • 罗马数字转换
  • Base64 转换
  • Base64 文件转换
  • 颜色表示转换,hex, rgb, hsl and css
  • Case converter
  • Text to NATO alphabet
  • YAML to JSON
  • JSON to YAML
  • List converter

网页相关

  • 编解码 URL
  • Escape html entities
  • URL parser
  • Device Information
  • Basic auth generator
  • Open graph meta generator
  • OTP code generator
  • Mime types
  • JWT parser
  • keycode info
  • Slugify string
  • HTML WYSIWYG editor
  • User-agent parser
  • HTTP status codes
  • JSON diff

图片和视频

  • QR Code generator
  • SVG placeholder
  • Camera recorder

开发相关

  • Git cheatsheet
  • Random port generator
  • Crontab generator
  • 美化 GSON
  • JSON 压缩
  • 美化 SQL
  • Chmod 计算
  • Docker run 到 Docker Compose 转换

网络

  • IPv4 子网计算
  • IPv4 地址转换
  • IPv4 地址范围
  • Mac 地址查询
  • IPv6 ULA 生成

数学相关

  • Math evaluator
  • ETA calculator

其他

  • Chronometer
  • Temperature converter
  • Benchmark builder
  • Lorem ipsum generator
  • Text statistics
  • Phone parser and formatter

安装

使用 Docker 镜像可以很快的安装上。更加具体的 docker-compose.yml 可以见这里

git clone https://github.com/einverne/dockerfile.git
cd dockerfile/it-tools
docker-compose up -d

学习

it-tools 也可以作为一个很好的学习 Vue 和 TypeScript 的项目,给这个项目贡献一个常用的工具库,用 Vue 绘制界面可以很好的上手 Vue 的使用。


2023-05-07 it-tools , tools , it , vue , base64

EV Hosting 域名注册服务

EV Hosting 上线了域名注册服务,现在可以在 EV Hosting 选购超过 20 种的域名后缀,包括了常见的 .com, .org, .me, .info 等,还上线了 .fun, .life, .studio, .store 等等新的顶级域名。域名的价格在不同时期会略有不同。

在目前阶段,.fun, .pw, .life, .shop, pics, .studio, 等等域名只需要 20~30 元不等就可以购买一年。但是域名的续费一般会比较贵,可以酌情考虑不同的域名后缀。EV Hosting 也会在不同时间提供最优惠的域名注册服务。

注册域名

请注意购买域名之前,保证自己的注册邮箱是能够接收邮件的,在注册完成之后会受到一封验证邮件,域名注册局在第一次购买时需要验证该邮箱的使用。

qLFR

在下一个页面中进行支付。

qaYI

完成付款之后在「我的域名」中就能看到购买的域名。

在 EV Hosting 后台进行 DNS 记录管理

在 EV Hosting 中,点开对应的域名,可以在侧边栏中修改 NS 名称服务器(Name Server)。

本站提供的四个名称服务器可以在这里 查看(仅注册用户可见)。

qiN4

将域名添加到 Cloudflare 管理

更推荐将域名添加到 Cloudflare 后台进行管理,访问 Cloudflare 后台,然后将域名添加到 Cloudflare。使用 Cloudflare 可以免费享受其提供的 CDN,还能隐藏背后服务器的 IP 地址。现在就介绍一下如何将 EV Hosting 购买的域名添加到 Cloudflare 。

首先要有一个 Cloudflare 的账号,进入账号之后,点击 「Add a site」,然后输入自己购买的域名。

qCTW

然后再下一步中选择 Free,使用免费套餐。然后 Cloudflare 会自动对域名进行扫描,自动找到域名的 DNS 记录,点击导入。然后 Cloudflare 会给出两个 Name server 的地址,将这两个服务器配置到 EV Hosting 域名管理后台的名称服务器中。

qEZQ

完成配置之后,等待一段时间 NameServer 生效,点击页面中的 「Done,check nameservers」。Cloudflare 会自动检查 DNS 是否生效,如果检查通过,会发一封邮件到 Cloudflare 的邮箱中。

添加到 Cloudflare 之后就可以使用 Cloudflare 的 DNS 管理,添加 [[A 记录]], [[TXT 记录]], [[CNAME 记录]] 等等了。


2023-05-06 ev-hosting , hosting , clientexec , domain , domain-registry , nameserver , dns

使用 Ansible 管理 Crontab

[[Ansible]] 是使用 Python 开发的自动化运维工具。它可以配置管理,部署软件并编排更高级的任务,例如持续部署或零停机滚动升级。Ansible 可以用来管理 crontab。[[Crontab]] 是一个用于在 Unix 和 Unix-like 操作系统上执行定期任务的工具,它允许用户在预定的时间间隔内自动运行命令或脚本。Crontab 是 Cron Table 的缩写,Cron 是一个用于定时执行任务的守护进程。

Crontab 使用一个称为 crontab 文件的特殊文件来定义定期任务的计划。每个用户都可以拥有自己的 crontab 文件,其中包含一系列命令或脚本以及与之关联的时间规则。更加详细的 cron 使用可以参考之前的文章

借助 Ansible,用户可以轻松地创建、修改和删除 crontab 条目,自动化 Crontab 任务的管理。

为什么需要用 Ansible 管理 crontab

在没用使用 Ansible 之前,都是通过 crontab -e 手动对 cron 任务进行管理,通常的任务就是备份与同步。但是随着要管理的机器和需要定义的脚本内容越来越复杂,手工编辑 crontab 就无法维护了。

另外在学习 Ansible 之后,了解了「Infrastructure as Code」概念,通过配置文件来定义所有的配置修改是一个不错的解决方案。这样一方面不用自己备份所有的脚本内容,也不用每一次都临时创建。在系统初始化的时候,直接通过 Ansible 就能纳入管理。

安装 Ansible

首先,确保你的系统上已经安装了 Ansible。你可以使用包管理器来安装它。例如,在 Ubuntu 上,你可以运行以下命令:

sudo apt update
sudo apt install ansible

下面是一些使用 Ansible 管理 crontab 的常见任务示例:

创建 crontab 条目:

使用 Ansible 创建 crontab 条目非常简单。你可以编写一个 Ansible playbook 文件,其中定义了你要创建的 crontab 条目。以下是一个示例 playbook 文件的内容:

---
- name: Manage crontab
  hosts: your_target_hosts
  tasks:
    - name: Add crontab entry
      cron:
        name: "rsync backup"
        minute: "0"
        hour: "2"
        job: "/path/to/your/backup_script.sh"

在这个示例中,your_target_hosts 是你要管理 crontab 的目标主机的列表。name 字段是 crontab 条目的名称,minutehour 字段是定时任务的执行时间,job 字段是要执行的脚本或命令。

保存以上内容到一个 YAML 文件(比如 crontab.yml),然后运行以下命令来执行 playbook:

ansible-playbook crontab.yml

将在目标主机上创建一个新的 crontab 条目。

修改和删除 crontab 条目:

要修改或删除现有的 crontab 条目,你可以使用 Ansible 的 cron 模块的 state 参数。以下是一个示例 playbook 文件,演示如何修改和删除 crontab 条目:

---
- name: Manage crontab
  hosts: your_target_hosts
  tasks:
    - name: Modify crontab entry
      cron:
        name: "My cron job"
        minute: "30"
        hour: "3"
        job: "/path/to/your/updated_script.sh"
        state: present

    - name: Remove crontab entry
      cron:
        name: "My cron job"
        state: absent

在这个示例中,state: present 表示修改 crontab 条目,state: absent 表示删除 crontab 条目。保存以上内容到一个 YAML 文件,然后运行 ansible-playbook 命令来执行 playbook。


2023-05-05 ansible , playbook , crontab , python , linux

电子书

最近文章

  • macOS 上的清理工具整理合集 最近 macOS 系统磁盘空间告急,之前就出现过因为磁盘空间不足导致系统卡顿还出现突然黑屏的状态,所以这次就看到还剩余几十个 GB 的时候就开始清理工作了。清理的同时顺便就整理一下常用的几个清理工具。
  • 使用 Listmonk 搭建自己的 Newsletter listmonk 是一个开源的,使用 Go 语言编写的,自托管的邮件列表订阅应用。目前已经在 GitHub 收获了超过 10000 颗星星,listmon 速度非常快,功能丰富,并且可以直接打包成一个二进制文件,和 PostgreSQL 数据库一起使用。
  • macOS 自定义系统设置记录 因为电脑空间告警,所以用 Clean Me 这个应用对系统进行了一次清理,没想到的是,可能在我误操作的情况下把我系统的设置和全部软件的设置都给清空了。我所有的系统配置都恢复了初始的状态,让我使用起来非常变扭,我在之前有写过一篇 MacBook 初始化和应用安装 的文章,但是那篇文章写的比较啰嗦,索性就重新整理一下。
  • EV Hosting 共享邮件服务 过去的一个月里面 EV Hosting 陆陆续续更新了共享主机服务,域名注册服务,现在因为我自己使用域名邮箱一直也在使用域名邮箱,所以现在也推出了域名邮箱服务。
  • 《非暴力沟通》读书笔记 怎么知道的这一本书