我有一个非常简单的systemd
服务:
[Unit]
Description=throttle service
[Service]
ExecStart=%h/.local/bin/throttle --server
Type=simple
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
执行的服务使用mbsync [something]
python运行命令。subprocess
shell=False
我已经安装了 3 个副本mbsync
:
❯ which -a mbsync
/home/fbence/.local/bin/mbsync
/home/fbence/.local/bin/mbsync
/usr/bin/mbsync
/bin/mbsync
从登录 shell运行mbsync
显然会运行 中的顶部服务~/.local
。如果我手动启动systemd
服务,systemctl --user start throttle.service
它也会选择这个服务。如果我重新启动系统,它似乎会选择其他(较旧)版本之一,因为我看到 中的错误journalctl
,它正在尝试访问较旧版本的配置文件。如果我手动停止并重新启动服务(systemctl --user stop/start
),它会再次正常工作。
为什么这不一致?我启动它和它在启动时启动有什么区别?我该如何修复它以使其在启动时也能正常工作?
更新
经过一些调试后,我发现/usr/libexec/gdm-x-session
记录了一些有关运行的信息dbus-update-activation-environment
。我测试并添加ExecStartPre=/bin/sleep 30
解决了该问题。所以现在我的问题实际上是:如何设置服务以不那么黑客的方式等待这种情况发生?