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

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

相关推荐
Maggie_ssss_supp10 小时前
Linux-MySQL权限管理
linux·运维·mysql
石像鬼₧魂石10 小时前
Kali Linux 内网渗透:深度工程实施手册
linux·运维·服务器
LXY_BUAA11 小时前
《source insight》添加对.s文件的支持
linux
fai厅的秃头姐!11 小时前
01-python基础-day02Linux基础
linux
好评12411 小时前
git常见操作及问题
linux·git
不会代码的小猴12 小时前
Linux环境编程第一天笔记
linux·笔记
optimistic_chen12 小时前
【Docker入门】cgroups 资源控制
linux·运维·ubuntu·docker·容器·cgroup
LXY_BUAA12 小时前
《嵌入式操作系统》_内核编译练习与配置文件讲解_20260119
linux·运维·服务器
xlq2232213 小时前
4.LInux权限
linux·运维·服务器