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
    • 最新
    • 标签
主页 / server / 问题 / 905496
Accepted
Hristo Kolev
Hristo Kolev
Asked: 2018-04-02 01:47:07 +0800 CST2018-04-02 01:47:07 +0800 CST 2018-04-02 01:47:07 +0800 CST

将 PATH 变量导入 systemd 单元

  • 772

我有一个如下所示的 systemd 服务:

[Unit]
Description=Kcrypt Backend Webpack Bundler
After=network.target

[Service]
User=kenny
Environment=NODE_ENV=PROD
WorkingDirectory=/var/www/kcrypt-api/
ExecStart=/var/www/kcrypt-api/scripts/webpack.sh

[Install]
WantedBy=multi-user.target

.sh 文件如下所示:

#!/usr/bin/env bash

export NODE_ENV=DEV

rm ./dist/* -rf

yarn start webpack --watch 

问题是它找不到yarn。

我的用户叫kenny. kenny有一个名为nvminstalled 的工具来管理nodejs版本。该工具PATH通过编辑“~/.bashrc”将目录添加到环境变量。

这意味着该yarn命令仅在用户以kenny.

我留下的印象是,如果我将systemd' units 用户设置为 'kenny',systemd其余的会处理,或者我不知道我在想什么。

有什么方法可以将kennyPATH 变量导入到systemd unit?

systemd
  • 2 2 个回答
  • 2223 Views

2 个回答

  • Voted
  1. Best Answer
    Andrew
    2018-04-04T06:30:33+08:002018-04-04T06:30:33+08:00

    与其尝试“引用用户PATH变量”,不如PATH手动定义,或者更恰当地说,使用二进制文件的完整路径。

    这意味着 yarn 命令仅在用户以 kenny 身份登录时可用

    这是不准确的。这只是意味着它yarn没有安装在PATHsystemd 使用的变量引用的位置,并且可能在自定义位置或默认 PATH 变量之外的位置。

    当您以 身份登录时kenny,用于which yarn打印 的路径yarn,然后确保在脚本中引用它时使用该路径。

    • 2
  2. filbranden
    2018-04-04T20:59:53+08:002018-04-04T20:59:53+08:00

    bash 仅在您将其作为交互式 shell 运行时才会 source ~/.bashrc,如果您只是为脚本运行 bash 则不会这样做。

    考虑到 systemd 只是运行 bash 作为webpack.sh脚本的解释器(实际上它甚至不知道涉及到 bash,内核从 #! 行作为解释器执行它),那么它就不是交互式 shell,也没有启动文件被读取。

    您可以通过在脚本~/.bashrc开头显式采购来解决此问题webpack.sh,假设其中的所有内容都可以安全地在非交互式 shell 中运行。(应该没问题。)

    因此,请考虑将此行添加到脚本的开头:

    . ~/.bashrc
    
    • 0

相关问题

  • SSH 会话在关机/重启时挂起

  • 我可以使用 systemd 重新启动依赖服务吗?

  • 让我的旧初始化脚本在 systemd 中工作的最简单方法是什么?

  • 在 CentOS 7 上为 systemd 启动的进程增加 nproc

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve