生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

给你一篇部署文档,你能不能写一个脚本出来

8月12日 菩提门投稿
  提醒:本文为合集文章,后续会持续更新!
  关注我,持续学习shell脚本,每日提升!
  谁一开始写shell脚本不是从流水账开始的?写着写着你就会发现,需要在哪里加判断,在哪里抛出异常。写着写着就知道何时用函数,何时用变量。写着写着你就会说,shell脚本也就那么回事。
  【需求】
  将如下部署文档用一个shell脚本实现。
  1)下载源码cdusrlocalsrcsudocurlOhttp:nginx。orgdownloadnginx1。23。0。tar。gz
  2)解压sudotarzxfnginx1。23。0。tar。gzcdnginx1。23。0
  3)安装依赖RHELRockysudoyuminstallygccmakepcredevelzlibdevelopenssldevelubuntusudoaptinstallygccmakelibpcredevlibssldevzlib1gdev
  4)配置sudo。configureprefixusrlocalnginxwithhttpsslmodule
  5)编译和安装sudomakesudomakeinstall
  6)编辑system服务管理脚本sudovilibsystemdsystemnginx。service写入如下内容〔Unit〕DescriptionnginxhighperformancewebserverDocumentationhttp:nginx。orgendocsAfternetworkonline。targetremotefs。targetnsslookup。targetWantsnetworkonline。target〔Service〕TypeforkingPIDFileusrlocalnginxlogsnginx。pidExecStartusrlocalnginxsbinnginxcusrlocalnginxconfnginx。confExecReloadbinshcbinkillsHUP(bincatusrlocalnginxlogsnginx。pid)ExecStopbinshcbinkillsTERM(bincatusrlocalnginxlogsnginx。pid)〔Install〕WantedBymultiuser。target
  7)加载服务sudosystemctldaemonreload
  8)启动服务sudosystemctlstartnginx
  【参考脚本】!binbashckok(){if〔?ne0〕thenecho1error。exit1fi}downloadng(){cdusrlocalsrcif〔fnginx1。23。0。tar。gz〕thenecho当前目录已经存在nginx1。23。0。tar。gzecho检测md5ngmd5md5sumnginx1。23。0。tar。gzawk{print1}if〔{ngmd5}e8768e388f26fb3d56a3c88055345219〕thenreturn0elsesudobinmvnginx1。23。0。tar。gznginx1。23。0。tar。gz。oldfifisudocurlOhttp:nginx。orgdownloadnginx1。23。0。tar。gzckok下载Nginx}installng(){cdusrlocalsrcecho解压Nginxsudotarzxfnginx1。23。0。tar。gzckok解压Nginxcdnginx1。23。0echo安装依赖ifwhichyumdevnull21thenRHELRockyforpkgingccmakepcredevelzlibdevelopenssldeveldoif!rpmqpkgdevnull21thensudoyuminstallypkgckokyum安装pkgelseechopkg已经安装fidonefiifwhichaptdevnull21thenubuntuforpkginmakelibpcredevlibssldevzlib1gdevdoif!dpkglpkgdevnull21thensudoaptinstallypkgckokapt安装pkgelseechopkg已经安装fidonefiechoconfigureNginxsudo。configureprefixusrlocalnginxwithhttpsslmoduleckokConfigureNginxecho编译和安装sudomakesudomakeinstallckok编译和安装echo编辑systemd服务管理脚本cattmpnginx。serviceEOF〔Unit〕DescriptionnginxhighperformancewebserverDocumentationhttp:nginx。orgendocsAfternetworkonline。targetremotefs。targetnsslookup。targetWantsnetworkonline。target〔Service〕TypeforkingPIDFileusrlocalnginxlogsnginx。pidExecStartusrlocalnginxsbinnginxcusrlocalnginxconfnginx。confExecReloadbinshcbinkillsHUP(bincatusrlocalnginxlogsnginx。pid)ExecStopbinshcbinkillsTERM(bincatusrlocalnginxlogsnginx。pid)〔Install〕WantedBymultiuser。targetEOFsudobinmvtmpnginx。servicelibsystemdsystemnginx。serviceckok编辑nginx。serviceecho加载服务sudosystemctlunmasknginx。servicesudosystemctldaemonreloadsudosystemctlenablenginxecho启动Nginxsudosystemctlstartnginxckok启动Nginx}downloadnginstallng
  【解析】
  其实脚本思路,大家也都没啥问题,毕竟给出了文档。有的同学,直接将文档,改成了脚本,这没错啊,shell脚本就是这样,将手动的操作改成自动。
  但是,大家也要考虑,每一步执行中是否遇到问题,遇到问题了,你怎么去处理。脚本写的好不好,就在于细节你处理是否到位,很有可能一个小细节,那就是非常大的bug。
  比如,变量获取值和我们预期不符合,然而你却拿这个不符合预期的值进行了比较或者判断,那最终结果肯定也会不符合我们的预期,甚至是会报错。
  脚本分成了几个函数,其中有一个专门用来判断上一步有没有错的,就是这个ckok。为什么将它包装成了函数呢,因为整个脚本里,很多地方都需要做判断。
  下载包,这里,需要判断是否已经下载过了,而如果下载过了,还要判断下载的包是不是我们想要的,怎么判断呢?
  用〔ffilename〕来判断文件是否存在,文件存在,还需要计算它的md5值来判断是否符合我们的预期。所以,这里有一个点就是说,你必须要知道正确文件的md5值。
  当然,有的官网会给出文件的正确md5。下载过,就不要重复下载了,因为下载文件不仅耗费时间还耗费带宽。
  你脚本执行过程中出现了问题可能需要反复执行多次脚本,如果不判断是否下载过,那岂不是每次都要下载一次了。下载后,就需要安装啦。
  安装过程,根据文档,其实核心就三个大的步骤:configure,make,makeinstal。
  每一步都需要判断是否正确执行,因为它们是环环相扣的。为了让脚本更加完美,最好是每一个关键步骤都需要去做一个判断。
  文档里有一步,是需要安装依赖的。为了让脚本更加通用,所以你最好是根据系统来判断是使用yum还是apt来安装对应的包。
  我这里偷懒了,直接判断是否有yum或者apt命令,但实际上这样并不是最优的方案。最优方案是需要根据特定命令来判定系统是啥。
  比如是CentOS,是RHEL,还是Rocky?当然,甚至连它们的版本也要做判断。不过话说回来,我们还不需要搞到那么那么完美。包括大家以后工作中写脚本时,肯定是需要有一个前提的,比如,针对CentOS7写的脚本,或者针对Rocky8写的脚本。所以呢,脚本就不需要整那么复杂了。
  说到安装依赖,和下载包一样,也需要考虑是否已经安装过。所以,这一步需要大家先判断对应的包是不是已经安装过了,安装过就不需要再安装。
  我脚本里其实也有缺陷,比如安装完包后没有去检测这个包是否安装成功。其实,这是有必要做的,因为依赖包安装不成功,直接影响到了能否make成功。
  make和makeinstll两个可以合并,比如:makemakeinstall。写成一行也是可以的,最终只做一个判断。
  install完成后,就该编辑systemd服务管理脚本里,这里有好几个同学都有问题,大家有的使用echo有的使用EOF这种,都可以实现。
  但是,大家忽略了一个问题,就是你echo的文本里是有符号的。它在shell脚本里是会被当成调用变量的符号的。所以,这里需要特殊处理一下,加个,即,它会将符号脱义。
  再往后就是daemonreload和start服务了,这里同样也要做个检测。
  关注阿铭linux,持续提升!
投诉 评论

中国电竞凉了?继三大赛事无缘4强后,连输越南都成了家常便饭各大热门游戏的世界赛通常在每年的912月进行,这段时间也是电竞爱好者最期待的时候。不过相比较2021年的成绩,今年中国电竞的成绩显然不太让人满意,导致不少人扬言中国电竞凉了。……她30岁怀孕登上维密,让C罗痴迷了5年,伊莲娜现在怎样了近日,C罗女友乔治娜现身卡塔尔。她一袭华服,珠光宝气地亮相球场。虽然这次C罗带着遗憾离开了卡塔尔,但乔治娜却为他在场外赚足了关注。从2017年相恋开始,C罗和……乡下土猪娶城市白菜被群嘲,不是社会充满恶意,是你太穷了我听到过很多朋友抱怨,说现在人没有人情味儿,说整天碰到的都是烦心事,说整个社会都不想让他过好日子。这些人日复一日,年复一年的抱怨,日子也并没有好起来。这是因为,他们都没有……给你一篇部署文档,你能不能写一个脚本出来提醒:本文为合集文章,后续会持续更新!关注我,持续学习shell脚本,每日提升!谁一开始写shell脚本不是从流水账开始的?写着写着你就会发现,需要在哪里加判断,在……6个单词念了1个小时,1首古诗背俩小时?鸡娃前先懂娃经常在一些社交平台上看到这样的吐槽,6个单词,我教了他俩小时,愣是没学会。1首五言绝句,总共就20个字,孩子背了两个小时,三岁的老二都会了,七岁的老大还是背不过,这孩子是不是脑……德国亲华派取得全面胜利?朔尔茨要改革欧盟,美国想惩罚沙特对华政策如何定调?德国政商两界闹矛盾如何处理对华关系问题已经成为当下德国这个欧盟大当家心中的头等大事之一,但也正因为这个问题太大,牵扯利益太多,大侠注意到,德国政经界,最……不再只关心交易数据GMV,这届天猫双11有这些变化11月12日零点,双11收官。各大平台不再公布数据,不再像以往一样过度比拼排名,这个双11正在悄然发生着一些变化。天猫表示,今年天猫双11稳中向好,交易规模与去年持平,去……6个生活智慧总结,明白人看过后更通透,不明白人看了就明白1hr对待兔子,要喂它胡萝卜,而不是牛肉,这叫明确需求。有需求,就产生价值,只有具备了价值,人才能嵌入到社会运行的链条,让自己变得有用。保持开放,让每个人各得其所,……如何巧用冰雪资源盘活冰雪经济嘉盛世规划设计以文化導入當代文旅項目的策劃定位,規劃設計,匠人建造一體化于旅遊城市綜合體提升,田園綜合體,特色小鎮,鄉村振興戰略的實施,园林景观,冰雪文化綜合體等文旅項目的綜合性服務!策划规……太阳闹剧升级戈贝尔目标曝光,美媒爆3换1交易76人欲复制火箭北京时间9月17日,自由市场正在如约而至的持续发酵中,各支球队都在跃跃欲试,地震级交易以及顶薪续约合同此起彼伏,联盟也在不断上演着抢人大战,为下赛季的球队崛起保驾护航。太……半月谈丨沙泉共存大漠奇观的保护之道沙泉共存:大漠奇观的保护之道半月谈记者张文静郭刚王植樱金沙环碧水、清泉映鸣沙。在丝绸之路上的历史文化名城敦煌,鸣沙山月牙泉景区以独特的大漠奇观吸引着无数中外游客一睹……封车讯近20个欧洲国家同步上市,TA能代表中国新能源车刷屏全封面新闻记者李继龙9月13日,全球纯电超能跨界车MGMULAN在中国,以及德国、法国、意大利等近20个欧洲国家同步上市,补贴价12。98万元18。68万元。据了解,……
攀岩极限滑索快来松江这个新建体育场打卡吧CBA消息杜锋大战李楠徐杰再立功,北控三连败马布里再受质疑当年的天王张国荣经历了什么,选择了跳楼?揭示地下水高浓度氨氮累积机制关晓彤早春穿搭来袭,穿荧光绿短裙,尽显绿意盎然的春日气息锦绣时光机十张30年前的门票安卓芯片哪家强?盘点骁龙和天玑系列,这两颗芯片成香饽饽埃安发起抢攻号角!2月销量30086特斯拉继续减少零件,生产效率提升三成,下一代车型成本减半推动北京养老项目向承德延伸,两地签订养老服务框架合作协议出境游商家回归干的活儿是新的周六足球赛事女人必看最养男人的食物是什么落实教育惩戒权须过五关触动心灵的爱老胃病患者可以常喝粥吗三更半夜微信聊天记录怎么查(查已删除的微信聊天记录)教师工作总结小妇人丨为什么初恋基本上都会分手?解放军万岁金溪县残疾人权益保障工作专题调研报告52岁王菲终于再出山!参加中秋电影音乐会,穿白衬衣造型好高级小学四年级植树节日记200字whoo后拱辰享系列怎么用whoo后拱辰享系列使用顺序

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找