- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我认为我想做的事情有点复杂,但我希望得到任何帮助或建议:
我有一个 bash 数组 ${IP_ADDRESSES[@]},其中包含(正如您可能猜到的)IP 地址。该数组通过 cron 每 10 分钟更新一次。
我需要做的是将这些 IP 地址“动态”注入(inject)到 apache 配置文件(/etc/httpd/conf.d/balancer.conf)中。我尝试修改的行的语法是:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://<<ip-address>>:80 route=X
然而,这就是棘手的地方。我有以下要求:
例如:
存在一个没有平衡器成员的配置文件。此时,我们感兴趣的配置文件部分如下所示:
<Proxy balancer://cluster01)cluster>
脚本识别出没有成员,并查看 ${IP_ADDRESSES[@]} 并发现它包含 3 个 IP 地址。对于第一个条目,在“”下方插入第一行。现在看起来像这样:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
接下来,它会添加第二个和第三个:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
此时一切都很好。我有一个可以在 3 个 IP 地址上工作的配置文件。惊人的。但是当 cron 作业下次运行时会发生什么?有一些事情可能发生:
a) 没有任何变化,IP 地址相同并且没有修改配置文件b) 一个或多个 IP 地址已更改。我想将数组中的 IP 地址与配置文件中的 IP 地址进行比较并替换它。c) 数组中存在或多或少的 IP 地址。如果它小于配置文件中的值,请从配置文件中删除不在数组中的所有条目。如果更多,请添加数组中的任何 IP 地址
例如
配置文件一切正常,数组中的 IP 地址反射(reflect)了配置文件中的内容。它看起来像这样:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
但是,我们从数组中丢失了 1.1.1.2。它已被 1.1.1.4 取代。配置文件现在应该如下所示:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.4:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
或者,假设 1.1.1.4 是一个额外的 IP 地址,并且该数组现在包含 4 个元素;将其添加到末尾:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.1:80 route=0
BalancerMember ajp://1.1.1.2:80 route=1
BalancerMember ajp://1.1.1.3:80 route=2
BalancerMember ajp://1.1.1.4:80 route=3
等等
或者,如果我们从数组中丢失 2 个 IP 地址(1.1.1.1 和 1.1.1.2),配置文件应如下所示:
<Proxy balancer://cluster01)cluster>
BalancerMember ajp://1.1.1.3:80 route=0
所以最后我只是试图让配置文件与数组中的 IP 地址保持同步。
非常感谢任何和所有帮助。
干杯!!
最佳答案
在更新数组内容的脚本中添加
1) 通过检查 md5sum 来检查数组是否已更新 echo ${array[*]} | md5sum
您可以将其保存在临时文件中以供后续比较。
2)准备一个文件,其语法每次更新时都会更改:
for i in $(seq 0 $((${#klp[@]} - 1)))
do
echo "BalancerMember ajp ://${array[ $i ]}:80 route=$i" >> tmpFile
done
3) 删除将使用现有文件中的 tmpFile 内容填充的现有行
sed -i '/BalancerMember ajp:\/\/.*=[0-9]/d' <exitingFile>
4) 将文件 tmpFile 的内容(在正确的位置)附加到您的现有文件
sed -i'.bck' '/yourPattern/ r tmpFile' <exitingFile>
现在您的现有文件(即您的conf文件)已更新IP
请注意:
yourPattern 是原始 conf 文件中以 BalancerMember 开始的行之前的模式匹配行。
exitingFile 是您现有的conf 文件。
如果您犯了一些错误,最后一个 sed 语句将创建一个扩展名为 .bck
的备份文件。
如果您不想更改现有脚本,也可以在新脚本中实现此解决方案。您只需要更新的数组值,如果您在同一脚本中执行此操作,那么检查数组是否已更新的任务将很容易。
关于linux - Bash 脚本 : continually modifying IP addresses in configuration file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23601037/
编码新手,无法弄清楚为什么 continue 在我的 for 循环中不起作用。在打印语句之后,我想从顶部重新开始循环。如果有人能让我知道我做错了什么,那就太好了。我不允许共享 cse231_rando
我正在尝试运行连续异步查询。在我的 Windows 盒子上,我通过双击 ignite.bat 文件启动了 Apache Ignite,并尝试运行以下代码 - Data Publisher 客户端包点燃
目前我正在尝试了解 openCV 中连续矩阵和非连续矩阵之间的一些区别。有人向我建议连续矩阵提供更好的性能,因为程序不必在每一列的末尾跳回到下一行的开头。 简而言之,连续和非连续矩阵之间的可比较性能差
我有一个运行多个行的 cron,删除“坏”的行(根据我的标准)。我只是想知道优化脚本的最佳方法是什么。我可以执行以下操作之一: 让同一个 cron 在发现“坏”行后立即删除它们。 让相同的 cron
我已经在我的 Tfs2010 实例上运行了一个 CI 构建,但我还想运行一个门控检入构建。然而,我希望这两个构建运行的方式之间存在细微的差异。具体来说,我希望 Gated checkin 在失败时不产
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 1年前关闭。 Improve this
Here和 here据说Continuation Monad解决了回调 hell 。 RX 和 FRP 也解决了回调 hell 。 如果所有这三个工具都解决了回调 hell ,那么就会出现以下问题:
我的 Java 缩进风格可能有点特殊,我经常这样写: object.myMethod( myFirstArgument, mySecondArgument, myThirdArgument,
关闭。这个问题需要details or clarity .它目前不接受答案。 想要改进这个问题吗? 通过 editing this post 添加详细信息并澄清问题. 关闭 2 年前。 Improve
我正在使用苹果的 SpriteKit 和 Swift 制作一个简单的游戏,并且遇到了问题。我试图让桨节点(paddle)围绕圆内的固定节点(anchorNode)连续旋转;但是,我无法弄清楚如何使桨节
我正在尝试为控制系统编写一个自适应 Controller ,即使用 Q-learning 的电源管理系统。我最近为车杆系统实现了一个玩具强化学习问题,并根据 Andrew NG 的笔记制定了直升机控制
我想知道一种原生支持定界延续的编程语言。我确实知道 Scala 曾经有 shift 和 reset,但这些都被删除了;而且我也知道 Seaside 似乎有类似的东西,但 Seaside 是一个图书馆,
在本教程中,您将通过示例了解 continue 语句。 continue 语句用于跳过循环的当前迭代,程序的控制流转到下一个迭代。 continue 语句的语法是: continue
背景 目前,我在本地构建解决方案时运行预构建命令。但是,在我的 VSTS 持续集成服务器上构建时不需要此命令。 问题 有没有办法在本地机器上构建时只运行预构建事件命令? 我知道您可以添加如下条件语句。
我有时会有 1 或 2 个测试在 CI 中失败,并且重新运行构建会导致它们通过。 如何自动重新运行这些不稳定的测试,以便我的构建第一次通过?有没有类似 mocha 的东西的this.retries ?
希望有人可以帮助我解决这个问题。让 TeamCity 启动并运行并在各种项目上进行构建。我希望能够自动将成功的 TeamCity 运行构建复制/部署到测试服务器。 我正在考虑使用 PowerShell
我希望使用持续集成,但我对 Ant、Jenkins、CruiseControl、Phing、PHPUnderControl 等并不了解…… 什么是真正的持续集成? 我正在使用 Zend Framewo
我已将 travis 设置为使用 tox(Python 2.7 和 3.5)进行测试并部署到 pypi。 Travis 尝试为每次测试运行部署包,而 pypi 正确地拒绝了第二次尝试。 我希望 tra
我正在尝试使用 pem key 将一些文件 scp 到不同的计算机,所以我不需要我的密码。但是,每次我尝试连接到一个新盒子时,它都会问我“说真的,你想连接吗?你想保存 key 吗?......”这太烦
使用dvc无疑有很多优势,它可以像集中式vcs一样使用,但是具有本地提交功能并且能够很容易地将项目 fork 给一些较小的团队,从而使得更难于支持持续集成吗?它有助于开发,使每个人都可以访问由CI服务
我是一名优秀的程序员,十分优秀!