首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Systemd用户服务exec命令不在路径中

Systemd用户服务exec命令不在路径中
EN

Stack Overflow用户
提问于 2020-04-01 18:27:21
回答 1查看 1.3K关注 0票数 2

在我的NixOS configuration.nix中,我创建了以下服务:

代码语言:javascript
复制
systemd.user.services.xcape-daemon = {
  description = "Xcape Daemon";
  after=[ "graphical.target" ];

  serviceConfig = {
    Type = "forking";
    ExecStart = ''${pkgs.xcape} -e "Hyper-L=Tab;Hyper_R=less"'';
    # ExecStop = "pkill xcape"; #pkill not found in path
    Restart = "on-failure";
  };

  wantedBy = [ "default.target" ];
};

systemd.user.services.xcape-daemon.enable = true;

但是,在检查服务状态时会出现以下错误:

代码语言:javascript
复制
Executable "xcape" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"

问题是,这不是我的实际$PATH。

我的$PATH是:/home/user/bin /run/wrappers/bin /home/user/.nix-profile/bin /etc/profiles/per-user/user/bin /nix/var/nix/profiles/default/bin /run/current-system/sw/bin

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 20:48:06

这实际上是意料之中的,因为systemd为编译时确定的$PATH使用了一个固定的值(以确定您是否在拆分-usr发行版上)。

引用自systemd.exec(5)手册页:

$PATH Colon-在启动可执行文件时要使用的目录列表。systemd在系统管理器中使用固定的"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin“值。当为具有“未合并的/usr”(/bin不是/usr/bin的符号链接)的系统编译时,":/sbin:/bin“被追加。在用户管理器的情况下,每个bin/和sbin/对都被切换,这样来自/usr/bin的程序比/usr/sbin中的程序具有更高的优先级,等等。建议不要以任何方式依赖这一点,并且在$PATH中只有一个具有给定名称的程序。

您有几个选项可以解决这个问题:

  1. 使用xcape二进制文件的完整路径:ExecStart=/full/path/to/bin/xcape -e ...
  2. 使用以下任何一种方法定义您自己的$PATH: a. Environment="PATH=/bin:/sbin:/nix/var/nix/profiles/default/bin:..." b. EnvironmentFile=/etc/myservice/myenvfile,其中/etc/myservice/myenvfile包含环境变量的定义(关于这两个指令的文档,请参见systemd.exec(5) )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60977834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档