当前位置: 首页 > 知识库问答 >
问题:

多个命令:错误时不继续[duplicate]

慕宪
2023-03-14

我有一个部署脚本,该脚本在本地构建生产资产,并通过scp将它们传输到服务器。压缩格式。

然后,它使用ssh连接到那里,并执行一系列命令,同时解压缩传输的文件。

一个有效的例子:

# local script commands here ... 

# ssh with remote commands
ssh $SSH_SERVER -p $SSH_PORT <<- HERE

        cd $REMOTE_PATH

        # move our zip to /www folder
        mv $LOCAL_TEMP_FOLDER_NAME.zip ../

        # move to www
        cd ..

        # zip our whole domain folder (backup)
        zip -q -r $DOMAIN_FOLDER_IN_WWW.zip $DOMAIN_FOLDER_IN_WWW

        # remove contents of our domain folder
        rm -rf $DOMAIN_FOLDER_IN_WWW/*

        # unzip our new deploy folder in our domain folder
        unzip -q -o $LOCAL_TEMP_FOLDER_NAME

        mv $LOCAL_TEMP_FOLDER_NAME/* $DOMAIN_FOLDER_IN_WWW

        # remove our deploy folder zip and the unzipped (now empty) folder too
        rm -rf $LOCAL_TEMP_FOLDER_NAME.zip $LOCAL_TEMP_FOLDER_NAME

        # activate our theme & plugins
        cd $DOMAIN_FOLDER_IN_WWW
        wp theme activate mytheme/resources
        wp plugin activate --all

        # assign menus
        wp menu location assign main-menu primary_navigation
        wp menu location assign footer-menu footer-menu

        exit 0
    HERE

# local script commands here ... 

问:如果任何命令失败,我如何停止执行并过早退出?当然,继续使用本地脚本。

大多数命令都是有条件的,前面的命令需要工作,下一个命令也需要工作。

这里有一个子问题,但在我的情况下很重要:我可以设置哪些命令是有条件的,哪些不是(这将触发退出)-例如,有些命令不那么重要并且可能“失败”,但移动到文件夹和zip/unzip不应该。

如何判断本地脚本中是否存在编程错误?最好调整输出,不要说“部署成功”:

编辑:如果我在ssh命令上添加“set-e”,它将退出,并且不会返回到本地脚本。我也无法控制哪些命令会失败(例如,设置菜单可能会失败,这不是问题)。

共有1个答案

邢运良
2023-03-14

哎哟,这似乎很容易(对我来说很幸运)。

感谢@Cyrus,我将set-e添加到我的ssh命令中,然后对于允许失败的命令,只需使用||true,如下所示:

command || true

请参阅特定命令的Bash忽略错误。

关于检查ssh状态,我刚开始在ssh命令中保留了“set-e”,然后在使用ssh命令后立即保留:

if [ $? -ne 0 ]; then
    done_alert_ssh_error_and_exit # local function that prints error output and exits
fi
 类似资料:
  • 问题内容: 有没有办法清理此(IMO)恐怖代码? 具体来说,我在谈论错误处理。能够一次性处理所有错误将是很好的。 问题答案:

  • 错误:多个命令生成“/Users/uesr/Library/Developer/Xcode/DerivedData/optimalive fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug iphoneos/optimalive”。应用程序/信息。plist':1)目标“OptimalLive”具有来自“/Users/uesr/Desktop/wor

  • 问题内容: 我在PHP / MySQLi中使用两个准备好的语句从mysql数据库检索数据。但是,当我运行语句时,出现“命令不同步,您现在不能运行命令”错误。 这是我的代码: 我尝试过的 将准备好的语句移动到两个单独的对象。 使用代码: } //To make sure that no stray result data is left in buffer between the first //a

  • 我已经在单节点集群上安装了Hadoop-2.4.0。在启动dfs和yarn并执行jps之后,我将运行以下服务。 当我尝试执行以下命令时,我得到了一个错误

  • 问题内容: 我正在使用Putty连接到远程服务器。我想知道的是,在关闭与Putty的会话后,是否有任何方法可以编写命令并使它们继续运行。原因是我不想一直保持计算机开机。有什么办法吗? 更新解决方案 对于我提出的问题,最好的解决方案是使用所提供的命令之一,例如 nohup ,因为您不必安装任何其他软件。但是,如果您遇到相同的问题,请使用屏幕,然后安装并使用它。太神奇了 我选择诺曼·拉姆齐(Norma

  • 问题内容: 当出现内部可观察到的错误(Ajax请求)时,RxJs停止侦听单击事件。我试图弄清楚如何使事件侦听器挂接到按钮click事件并优雅地处理内部ajax错误。 这是我的示例代码和指向plunkr的链接 http://plnkr.co/edit/NGMB7RkBbpN1ji4mfzih 问题答案: 您可以使用运算符(或别名)来捕获和处理可观察对象中发生的错误,以便不会将错误通知给订户。 忽略错