【问题标题】:How to wrap command line script to a ./sh file如何将命令行脚本包装到 ./sh 文件
【发布时间】:2017-08-23 15:59:10
【问题描述】:

我有一些脚本需要在远程实例上按顺序执行。

  1. cd /srv/wildfly-10.1.0.Final/bin
  2. sudo -s
  3. source /etc/profile
  4. ./jboss-cli.sh --connect command=:shutdown

如何制作 .sh 文件,以便可以 ssh 进入远程 EC2 实例并运行类似 ssh -i my-private-key ubuntu@xx.xx.xxx.xxx '/scripts/backup.sh'

另外,我应该把 ./sh 文件放在哪里?当我自己登录时,我从根文件夹运行命令。现在我需要让 Jenkins 远程 ssh 进入该实例并像我一样运行 shell 脚本。

我该怎么做?谢谢。我不知道 .sh 文件是什么以及如何运行它,更不用说如何在我的 EC2 实例中使用 Jenkins ssh 并为我运行这些命令。

【问题讨论】:

  • 这里最大的问题是脚本的其余部分在sudo -s 退出之前不会运行。
  • 顺便说一句,您真的需要/etc/profile.bashrc 以及由sudo -s 启动的交互式shell 运行的类似脚本吗?如果您可以不使用它们,您将拥有一个更可靠的脚本(如果用户的点文件的详细信息发生更改,则不太容易中断)。

标签: linux shell jenkins amazon-ec2


【解决方案1】:

SSH 可以远程运行你的脚本;您可以将多个脚本语句放在一个 .sh 文件中,您的用户帐户有权访问和执行,并且 SSH 应该能够运行它。

学习脚本:http://freeos.com/guides/lsst/ch08.html

【讨论】:

  • bash tag wiki 有一长串建议的参考资料。我们不需要在主题的任何地方的每个答案中都添加更多的内容(如果一个问题确实要求提供其他参考资料,那将是题外话;请参阅“一些问题是仍然离题”列表stackoverflow.com/help/on-topic)。
  • (另外,sudo -s 不会以这种方式在脚本中运行时执行 OP 希望它执行的操作)。
【解决方案2】:

将这些命令翻译成脚本可能如下所示:

#!/bin/sh
cd /srv/wildfly-10.1.0.Final/bin || exit
sudo bash -lic '. /etc/profile; exec ./jboss-cli.sh --connect command=:shutdown'

请注意,我们没有使用sudo -s(用于交互使用,并启动一个新的和单独的 shell),因为如果我们这样做了,脚本中的后续行将不会运行,直到那个新的、独立的外壳退出了。相反,我们使用sudo 调用bash-l(指定登录shell)和-i(指定交互式shell)。这是撒谎,你通常不应该在脚本中这样做——这会有所帮助的唯一原因是你的脚本需要执行的 root 的点文件中有一些东西,以及更好的答案是直接在脚本中明确放置所需的任何逻辑/设置。

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 2014-04-21
    • 2023-03-02
    • 2021-05-09
    • 1970-01-01
    • 2012-03-29
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多