AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1121495
Accepted
rgov
rgov
Asked: 2019-02-27 11:52:19 +0800 CST2019-02-27 11:52:19 +0800 CST 2019-02-27 11:52:19 +0800 CST

将 /snap/bin 添加到 systemd 使用的 PATH

  • 772

我在设置 Ubuntu Server 18.10 时通过 snap 安装了 Docker。

如果我有一个引用该docker命令的 systemd 单元文件,我会收到以下错误:

Executable "docker" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

我不确定它在哪里得到这个搜索路径。它与 /etc/environment 中的内容不匹配。

在不修改单元文件的情况下,我可以将 systemd 使用的搜索路径全局更改为 include/snap/bin吗?


在 Ubuntu 18.04 系统上,仅使用docker没有完整路径会导致错误Executable path is not absolute。理想情况下,我希望同一个服务文件同时使用 snap 的 Docker 和 apt 的 docker-ce 包。

systemd snap
  • 2 2 个回答
  • 36724 Views

2 个回答

  • Voted
  1. Best Answer
    terdon
    2019-02-27T16:37:31+08:002019-02-27T16:37:31+08:00

    根据systemd 文档,它的 PATH 是在编译时设置的(参见“命令行”部分):

    如果命令不是完整(绝对)路径,则将使用在编译时确定的固定搜索路径将其解析为完整路径。搜索的目录包括使用拆分 /usr/bin/ 和 /bin/ 目录的系统上的 /usr/local/bin/、/usr/bin/ 和 /bin/,以及使用拆分 bin/ 和 sbin/ 的系统上的 sbin/ 对应目录。因此,如果可执行文件位于任何“标准”目录中,只使用可执行文件名称是安全的,而在其他情况下必须使用绝对路径。建议使用绝对路径以避免歧义。提示:可以使用 systemd-path search-binaries-default 查询此搜索路径。

    在我的 Ubuntu 18.04 上查询路径的命令是sudo systemd-path search-binaries(在 Arch 上,它是systemd-path search-binaries-default):

    $ sudo systemd-path search-binaries
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    

    因此,您有以下选择:

    好处:编辑单元文件,使其使用绝对路径。假设您可以访问它,这是迄今为止最好的解决方案。它使文件符合规范,它允许您将它复制到其他机器,它甚至可以使警告消息静音。

    坏处:systemd从源代码重新编译,并更改路径。除非您真的知道自己在做什么,否则这是一个耗时、复杂且全面的坏主意。即使你这样做,这似乎也是一个糟糕的解决方案。systemd每次设置新机器时都无法重新编译。

    丑陋的:如果你真的不能修复单元文件,你总是可以创建一个符号链接/usr/bin指向docker

    sudo ln -s /snap/bin/docker /usr/bin/docker
    
    • 6
  2. Bhikkhu Subhuti
    2019-08-24T21:24:11+08:002019-08-24T21:24:11+08:00

    这是解决此问题的方法。

    检查变量 PATH 的值:

    echo $PATH
    

    添加 /snap/bin

    export PATH="$PATH:/snap/bin"
    

    如果这不起作用,则有一个名为 /etc/environment 的文件

    • 4

相关问题

  • 为什么 Ubuntu 同时使用 systemd 和 init?[关闭]

  • 命令列出启动时启动的服务?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve