我有一个部署脚本,该脚本在本地构建生产资产,并通过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”,它将退出,并且不会返回到本地脚本。我也无法控制哪些命令会失败(例如,设置菜单可能会失败,这不是问题)。
哎哟,这似乎很容易(对我来说很幸运)。
感谢@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 问题答案: 您可以使用运算符(或别名)来捕获和处理可观察对象中发生的错误,以便不会将错误通知给订户。 忽略错