如何让systemd服务仅在GNOME自动挂载完成后启动
如何让systemd服务仅在GNOME自动挂载完成后启动
兄弟,我太懂你这种靠sleep 10凑活但偶尔掉链子的痛苦了!你的问题核心是没搞清楚GNOME自动挂载的本质——它不是系统级的静态挂载(比如fstab里配置的那种),而是在你的用户会话里由udisks2动态完成的,所以之前那些systemd系统级的依赖配置根本抓不到它。给你两个靠谱的解决方案,看你需求选:
方案一:改成用户级systemd服务(推荐)
既然GNOME的自动挂载属于你的用户会话,把服务放到用户级systemd里,能完美和会话内的挂载事件联动,步骤如下:
- 把你的服务文件从
/etc/systemd/system/移到~/.config/systemd/user/目录下(如果这个目录不存在,直接mkdir -p ~/.config/systemd/user创建就行)。 - 编辑你的服务文件,添加这些依赖和启动顺序配置:
[Unit] Description=你的服务描述 # 依赖GNOME自动挂载的核心服务udisks2 Requires=org.freedesktop.UDisks2.service # 确保在udisks2和GNOME会话基本就绪后再启动 After=org.freedesktop.UDisks2.service gnome-session.target # 搭配路径监控单元,确保/media/你的用户名/下有挂载设备才启动 Wants=media-monitor.path After=media-monitor.path [Service] ExecStart=你的服务启动命令 # 其他原有配置保持不变 [Install] WantedBy=default.target - 接着创建对应的路径监控单元
~/.config/systemd/user/media-monitor.path,用来盯着/media/你的用户名/目录,只有当目录里有挂载点(也就是设备插上并挂载完成)时才触发服务启动:[Path] # 监控目录是否非空,也就是有设备挂载进来 DirectoryNotEmpty=/media/你的用户名/ [Install] WantedBy=default.target - 最后重新加载用户级systemd配置,启用并启动服务:
systemctl --user daemon-reload systemctl --user enable --now 你的服务名.service media-monitor.path
方案二:必须用系统级服务的情况
如果你的服务必须是系统级的(比如需要root权限),那得让系统级服务能感知到用户会话的挂载,步骤如下:
- 编辑你的系统级服务文件(一般在
/etc/systemd/system/下),添加这些配置:[Unit] Description=你的服务描述 # 依赖你的用户会话服务,把1000换成你的实际UID(用id -u命令能查到) Requires=user@1000.service After=user@1000.service # 搭配系统级的路径监控单元 Wants=media-monitor-system.path After=media-monitor-system.path [Service] ExecStart=你的服务启动命令 # 可选:如果服务需要访问用户挂载点,最好切换到你的用户身份运行 User=你的用户名 Group=你的用户组 [Install] WantedBy=multi-user.target - 创建系统级的路径监控单元
/etc/systemd/system/media-monitor-system.path:[Path] DirectoryNotEmpty=/media/你的用户名/ [Install] WantedBy=multi-user.target - 重新加载系统级systemd配置并启用:
sudo systemctl daemon-reload sudo systemctl enable --now 你的服务名.service media-monitor-system.path
为啥之前的方法不管用?
RequiresMountsFor=/media/你的用户名/:这个只能识别静态挂载(fstab或/etc/fstab.d里定义的),GNOME的动态挂载是在用户会话里生成的,系统级systemd根本看不到,所以白搭。local-fs.target:这是系统级本地文件系统挂载完成的标记,和用户会话里的USB自动挂载完全不是一回事,等它等于白等。sleep 10:纯靠赌运气,USB设备的挂载速度受设备本身影响,偶尔超时太正常了。
备注:内容来源于stack exchange,提问作者psychochair
相关产品推荐
相关产品推荐

