在 Arch Linux 上,由于一些系统更新(不幸的是我不能说出哪些),vmware.service
在关机/重新启动期间挂起。
我发现,如果我在该服务仍在运行systemctl stop vmware.service
时(即从 Gnome 终端)手动停止该服务 ( ) gdm.service
,该服务会快速停止,然后关闭的速度与预期一样快。我用 google 搜索了一下,发现 Fedora 21 上也存在类似的问题,一位用户最终切换到 lightdm 来解决这个问题。我不想切换到 lightdm 所以我想知道是否有任何方法可以告诉 systemdvmware.service
在 stop 之前停止gdm.service
。或者如果有人有解决方法......
答案1
当然,有办法。systemd
支持在单元对之间指定所谓的“排序依赖关系”,systemd
当这些单元恰好在单个事务中激活/停用时,这些单元遵循一定的相互排序。
从系统单元(5):
之前=,之后=
以空格分隔的单位名称列表。配置单元之间的排序依赖性。如果单元 foo.service 包含设置 Before=bar.service 并且两个单元都正在启动,则 bar.service 的启动将延迟到 foo.service 启动为止。 <...>请注意,当两个具有顺序依赖性的单元被关闭时,将应用启动顺序的相反顺序。即,如果一个单元在另一个单元上配置了 After=,则如果两个单元都关闭,则前者会先于后者停止。 <...>
因此,您希望在停止vmware.service
之前停用(停止) 。根据上述内容,可以通过向单元gdm.service
添加排序依赖性来实现。After=gdm.service
vmware.service
为了避免将整个单元复制到/etc/systemd/system
,您可能需要使用以下机制临时插入(参见“示例2”)。您需要创建一个/etc/systemd/system/vmware.service.d/<some name>.conf
仅包含所需指令和节标题的文件:
[Unit]
After=gdm.service
完成此操作后,发出systemctl daemon-reload
命令重新systemd
读取单位。关闭时,新的依赖项列表应该生效。