关于 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......

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

相关推荐
FoldWinCard11 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计12 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12313 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质13 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX13 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.13 小时前
Linux系统管理
linux·运维
阿龙的工作记录14 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手14 小时前
Linux的基本指令
linux·运维·服务器
hkj880814 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动16 小时前
Linux编程笔记3【个人用】
linux·笔记