我是一名初级系统管理员。我之所以问这个问题,是因为我们这里没有精通脚本的高级系统管理员。高级人员都在总部,太忙了,没时间处理这样的事情。
我的情况是这样的。为了部署应用程序,我必须经常运行三个脚本。这些脚本是由高级系统管理员编写的。通常情况下,它们运行顺利,没有错误。但是,我必须照看它们以进行输入。:(
在这些脚本的某些部分,有些部分我必须输入是或否。我的答案永远不会改变,除非前一部分失败,然后我选择否,然后系统显示“构建失败”。
我运行的基本部分如下:
1 - 通过 SSH 进入部署服务器
2 - 编辑文件中的一小段字符串(指定服务器的特定信息)
3 - 运行脚本 A,它基本上将所有文件从部署复制到目标服务器。我在这里唯一需要提供的输入是在最后。它会询问目标是否显示了正确的日期,如果我回答是,则构建成功。
4- 也从部署服务器运行脚本 B,这需要一些特定的信息,例如:
./scriptB XYZ 其中 X、Y、Z 的变化取决于目标服务器信息。
脚本 B 有一些问题,例如“你想执行这个还是放弃这个”,答案保持不变。此外,有时还会有一个 ANT 错误,因此它会要求我按“1”直到脚本继续。
5-运行脚本 C,它与脚本 B 非常相似。但是在某一时刻,它即将运行某个特定的步骤,我必须手动按“control c”才能退出。
我是脚本方面的新手,但如果有人能告诉我或给我一个想法如何做到这一点,那就太好了。我想我也许可以使用 expect。
更好的是,如果我只需在 Windows 笔记本电脑上单击某个 EXE,它就可以完成所有操作。这可能吗?
答案1
听起来你应该考虑两件事:
- 编辑旧脚本以自动执行某些检查(例如时间戳检查),或者删除提示(查找
read
命令)并使用默认值回答。 - 使用专为此任务设计的工具,例如Ansible。
如果您想学习新知识并提高您的系统管理员简历,我会考虑第二种选择,尽管第一种选择在短期内应该可以起到很好的作用!
如果您从我提到的第一个选项开始,请尝试让脚本 A 不需要提示 - 使用该date
函数获取当前日期,然后自动进行检查。如果您要比较的日期与您刚刚复制的文件中的时间相符,则应该能够使用或等工具find
来ls
获取该信息。
exit
运行脚本 C,在您通常会点击的位置输入命令应该很简单CtrlC。
首先,记得在非关键机器上测试一下!你不会想在破解旧脚本时搞砸生产设置吧……