关于 systemd 和桌面应用程序自动启动

大家好!我是大聪明-PLUS

升级到 openSUSE 15.5 后,我遇到了一些奇怪的问题:设置为开机自动启动的应用程序在尝试重启时开始崩溃。

这里需要指出的是,自重启的概念(至少在 POSIX 系统中)非常简单原始。我们启动一个新进程,将其整个环境*(包括打开的文件)* 复制到新进程中,然后退出。进程 ID (PPid) 重置为之前的父进程,瞧!我们就得到了一个新进程,*除了进程 ID 之外,*它看起来与之前的进程完全相同。

在 Linux 系统中, fork`--`fork是一个系统调用,它源于内核尚不支持命名空间的时代,并且不接受任何参数。` clone--` 是一个不同的、虽然类似但更新的系统调用,它可以用来将子进程放置在不同的命名空间中。

这个设备("respawn")还支持更新各种桌面软件。(当然,前提是您信任它在您的系统上执行此类操作。) Telegram 客户端也是如此。我的 xswitcher 中也实现了类似的功能。

系统更新后,它就彻底崩溃了。到处都找不到它。调试尝试显示进程启动、开始运行,然后静默终止。(收到 sigterm 或 sigkill 信号。我懒得在 xswitcher 里写个处理程序,所以才搞得这么混乱。)

如果不是机缘巧合,我或许会长时间惊叹于这种奇特的新"魔法"。在发布一个用于监控网络拓扑的巧妙脚本时,我决定"赶时髦",把cron它用在了[[ ... ] systemd.timer] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]

于是,我一本正经地在单元文件中写道:

复制代码
ExecStart=`/bin/bash `-c` `'ERR=`/usr/local/sbin/xxx-check-topology.sh 2>&1` || (echo "$ERR" | /usr/bin/mail -s "xxx topology error(s) found" root)'

我正在整理。......令我惊讶的是,邮件比预期的要少。

怎么回事?我手动启动它------结果就出现了问题,真是让人抓狂。在清理过的环境中也会出现同样的情况(这是 Basatin 的常见问题)。我开始深入研究,发现这个" mail"(它被打包在各种各样的" mailutils"、" mailx"等等中)实际上是以异步模式运行的!(而且它还有一个特殊的" -Ssendwait"键,用于在不需要异步模式时使用。)

我认为,将"异步模式"应用于进程时并不恰当。mail它会创建子进程并立即退出,而不会等待子进程完成。

我开始上网搜索,发现很多人都遇到过这个问题。从某个版本开始systemd (无论安全、容错、包容性或其他什么方式) ,当它启动的进程终止时,它会杀死所有相关cgroup进程。但是,如果进程最初是通过其他方式启动的,然后"掉线"到 systemd.kill 函数systemd-user,那么这种方法就无效了。

这就是今天这篇作文的成果。我已经指出了问题所在,但我还不知道该如何妥善解决。

  • 一方面,你可以直接拍拍他们的手systemd。那里有个"不杀"的开关。但从长远来看,我对此持谨慎态度。当然,一位知名微软员工的劳动成果并非绝对邪恶。但它无疑会助长粗心大意。你不再需要操心所有这些"妖魔化"、日志记录和其他IT维护工作。"随便敷衍了事,systemd它就会帮你收拾残局。" 随时都可能出现这种情况:下一个软件开发人员已经把所有清理工作都委托给了systemd......

  • 另一方面,你也可以想办法蒙混过关,比如找个廉价的中间人帮忙。不过我觉得这种做法不太体面。

相关推荐
chlk1238 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑9 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件9 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号19 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应3 天前
vi编辑器使用
linux·后端·操作系统