二次元の技术宅 念念不忘,必有回响。

解决容器内运行laravel定时任务导致大量进程的问题

起因是内网服务器每隔一阵就会失去网络连接,而且外接键鼠也会没有反应。那必定是什么程序占用了大量系统资源,想想只有近期部署的horizon和schedule服务可能出现这个问题。直觉以为php artisan schedule:run运行结束后就退出了,没有副作用。我便关注起horizon服务了,这反而让我踩了坑,因为僵尸进程恰恰就是schedule服务间接造成的。还是要经常打破思维惯性,常规之外总有意外。

在此说明下schedule服务的部署方式,方便大家与自身场景比对。laravel schedule中定义的任务都是runInBackground模式。schedule服务是以容器内部的定时来运行的,即crond是容器的init进程(pid 0),它根据我定义的crontabs文件,进一步调用schedule命令。直接造成僵尸进程的“罪魁祸首”便是有些无辜的crond了。我仿佛听到它一脸无辜地申辩:我不知道啊!言归正传,下面记录了僵尸进程的发现和解决方法。

理解Yii2核心架构

Yii2是一个设计简单,灵活性高,容易上手的MVC框架。它的生态所有欠缺,所以很需要理解框架,然后DIY。很希望Yii3能早日发布。

使用Yii2也有了几年,在理解控制反转/IoC的概念之后,再结合框架yii\base\BaseObjectyii\base\Component的源码解读,对框架又有了更深清晰的认识。

又一年

记录生活。这是一篇碎碎念的文章,与技术无关。

我是一个挣扎前行的普通程序员。博客建站的时候我还在大学,现今正因年龄危机而焦虑。

西式言论自由脏了GitHub

我的GitHub账号被封了,他们认为我存在harass, abuse, threaten, or incite violence中的某些行为,有违Acceptable Use PoliciesCommunity Guidelines。工单申诉,平台也一直不处理。

其实是他们先在GitHub这个技术社区滥发误导、污蔑性质的政治信息,恬不知耻地称之为“言论自由”。然而你骂一声,他们立刻就玻璃心了,觉得自己“自由正义”的话语招来了侵害。

由于账号被封,我也只能另外想办法恢复博客了。

解决Archlinux上Navicat15因glib2不兼容报错问题

当前版本2022年8月2日Archlinux系统软件包支持原版navicat15运行,不需要额外打补丁。

当前navicat已经更新到16了,由于没有正版许可证Linux版注册机,因此一直停留在老版本15。由此引发的软件包不兼容问题越来越多。

习惯性地更新了Archlinux所有软件包,发现Navicat无法运行了。命令行运行报错如下:

symbol lookup error: /usr/lib/libgio-2.0.so.0: undefined symbol: g_module_open_full

网上查到libgio-2.0.so.0glib2包的文件,显然是版本不兼容了。考虑到AppImage本质上就是把各依赖库打包起来做成了便携应用,便考虑把老版本的glib2打包进应用镜像,结果完美解决。

Hugo主题NES

偶然发现了NES风格的样式库,并打算以此做个主题。目前只设计了主要页面。

Archlinux添加自签名证书到系统

Web本地开发时可能要用到自签名证书来进行https访问。

Datetime字段类型默认值问题

Data truncation: Incorrect datetime value: ‘0000-00-00 00:00:00’ for column.

简而言之,就是字段值不能是0000-00-00 00:00:00:00

以非root用户运行docker服务

某些场景下可能需要使用以非root用户来运行docker服务,以保证系统的安全性。 参考文章 Run the Docker daemon as a non-root user (Rootless mode)

云锁导致的Docker镜像拉取失败

上周遇到了MTU导致的Docker镜像拉取失败,这次又遇到了奇怪的情况导致镜像拉取失败。