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

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

相关推荐
三84431 分钟前
文件查找/文件压缩/解压缩
linux·运维·服务器
小猪写代码33 分钟前
Linux 管道(Pipeline)作业
linux·运维·服务器
会周易的程序员3 小时前
microLog 的本地日志读取接口 log_reader — 本地日志文件读取工具开发指南
linux·物联网·架构·嵌入式·日志·iot·aiot
yoothey3 小时前
报废审批流规则引擎设计——责任链模式完整实现
linux·开发语言·bash
2501_925963383 小时前
外设的常见问题
linux
l1t4 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
柳鲲鹏4 小时前
LINUX高通平台交叉编译地图软件GDAL
linux
fei_sun4 小时前
路径MTU发现
linux·运维·网络
假如梵高是飞行员5 小时前
WSL2 从 img 镜像文件启动特定 Linux 发行版完整指南
linux·windows·wsl
瓶中怪6 小时前
ROS2 机器人软件系统
linux·c++·python·ubuntu·vmware·ros2·机器人软件开发