【问题标题】:Shell Script Issue Running Command Remotely using SSH使用 SSH 远程运行命令的 Shell 脚本问题
【发布时间】:2021-06-04 09:24:58
【问题描述】:

我有一个部署脚本,我想在其中清除 CDN 的缓存。当我在服务器上并运行我的脚本时,一切都很好,但是当我 SSH 并仅运行该文件(即实际上没有进入服务器,cding 进入目录并运行它)时,它失败并声明我的找不到doctl 命令。 这似乎只是这个程序在 ssh 上的问题,运行 systemctl --help 工作正常。

请注意,我已经使用 sudo snap install doctl 安装了 Digital Ocean 的 doctl,它就在那里。

这是.sh 文件(减去 cmets):

#!/bin/sh
doctl compute cdn flush [MYID]  --files [*]   # static cache

所以我不确定问题是什么。有人有想法吗?

同样,如果我进入服务器并运行文件,一切正常,但这是我使用的 SSH 命令返回错误:

ssh root@123.45.678.999 "/deploy/clear_digital_ocean_cache.sh"

这是错误。

/deploy/clear_digital_ocean_cache.sh: 10: doctl: not found

【问题讨论】:

  • 这个doctl 命令存储在哪个目录中?该目录通常如何添加到您的命令 PATH 中?
  • 我只是想出了一个使用doctl的绝对路径的解决方案,它位于/snap/bin。我实际上不确定该目录是如何添加到命令路径中的。是否可以在ssh 命令期间将snap/bin/ 添加到命令路径中?
  • PATH="$PATH:/snap/bin 添加到脚本的开头。
  • 您的本地PATH 未在远程主机上使用。 ssh 不会将您的本地环境转移到远程机器上。

标签: bash ssh sh digital-ocean


【解决方案1】:

一种解决方案是将命令更改为我的.sh 文件中的绝对路径,如下所示:

#!/bin/sh
/snap/bin/doctl compute cdn flush [MYID]  --files [*]   # static cache

我意识到我可以使用ssh(如systemctl)运行我的用户命令,因此要么更改doctl 的位置(即在用户bin 中),要么确保使用绝对值调用命令在命令前添加/snap/bin/ 的路径。

【讨论】:

  • 实际问题可能是您的 $PATH 在通过 ssh 与交互式运行时设置不同,可能基于您的 .bashrc.profile 的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多