当前位置: 首页 > news >正文

学校微网站模板下载地址goood设计网站

学校微网站模板下载地址,goood设计网站,网站被模仿,龙岩网红街在哪里编写可靠bash脚本的一些技巧 原作者#xff1a;腾讯技术工程 原文链接#xff1a;https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道#xff0c;bash 的坑不是一般的多。 其实 bash 本身并不是一个很严谨的语言#xff0c;但是很多时候也不得不用。以下…编写可靠bash脚本的一些技巧 原作者腾讯技术工程 原文链接https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道bash 的坑不是一般的多。 其实 bash 本身并不是一个很严谨的语言但是很多时候也不得不用。以下总结了一些鹅厂程序员在编写可靠 bash 脚本的一些小 tips。 0. set -x -e -u -o pipefail 在写脚本时在一开始Shebang 之后就加上这一句或者它的缩略版 set -xeuo pipefail这能避免很多问题更重要的是能让很多隐藏的问题暴露出来。 下面说明每个参数的作用以及一些例外的处理方式 -x 在执行每一个命令之前把经过变量展开之后的命令打印出来。 这个对于 debug 脚本、输出 Log 时非常有用。 正式运行的脚本也可以不加。 -e 遇到一个命令失败返回码非零时立即退出。 bash 跟其它的脚本语言最大的不同点之一应该就是遇到异常时继续运行下一条命令。 这在很多时候会遇到意想不到的问题。加上 -e 会让 bash 在遇到一个命令失败时立即退出。 如果有时确实需要忽略个别命令的返回码可以用 || true 。如 some_cmd || true # 即使some_cmd失败了仍然会继续运行 some_cmd || RET$? # 或者可以这样来收集some_cmd的返回码供后面的逻辑判断使用但是在管道串起多条命令的情况下只有最后一条命令失败时才会退出。如果想让管道中任意一条命令失败就退出就要用后面提到的-o pipefail 了。 加-e 有时候可能会不太方便动不动就退出。但觉得还是应该坚持所谓的fail-fast 原则也就是有异常时停止正常运行而不是继续尝试运行可能存在缺陷的过程。如果有命令可以明确忽略异常那可以用上面提到的 || true 等方式明确地忽略之。 -u 试图使用未定义的变量就立即退出。 如果在 bash 里使用一个未定义的变量默认是会展开成一个空串。有时这种行为会导致问题比如 rm -rf $MYDIR/data如果 MYDIR 变量因为某种原因没有赋值这条命令就会变成 rm -rf /data 。 这就比较搞笑了。。 使用 -u 可以避免这种情况。 但有时候在已经设置了-u 后某些地方还是希望能把未定义变量展开为空串可以这样写 ${SOME_VAR:-}# bash变量展开语法可以参考 https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html-o pipefail 只要管道中的一个子命令失败整个管道命令就失败。 pipefail 与-e 结合使用的话就可以做到管道中的一个子命令失败就退出脚本。 1. 防止重叠运行 在一些场景中我们通常不希望一个脚本有多个实例在同时运行。比如用 crontab 周期性运行脚本时有时不希望上一个轮次还没运行完下一个轮次就开始运行了。 这时可以用 flock 命令来解决。 flock 通过文件锁的方式来保证独占运行并且还有一个好处是进程退出时文件锁也会自动释放不需要额外处理。 用法 1 假设你的入口脚本是 myscript.sh可以新建一个脚本通过 flock 来运行它 # flock --wait 超时时间 -e 锁文件 -c 要执行的命令 # 例如 flock --wait 5 -e lock_myscript -c bash myscript.sh用法 2 也可以在原有脚本里使用 flock。 可以把文件打开为一个文件描述符然后使用 flock 对它上锁flock 可以接受文件描述符参数。 exec 123lock_myscript # 把lock_myscript打开为文件描述符123 flock --wait 5 123 || { echo cannot get lock, exit; exit 1; }2. 意外退出时杀掉所有子进程 我们的脚本通常会启动好多子脚本和子进程当父脚本意外退出时子进程其实并不会退出而是继续运行着。 如果脚本是周期性运行的有可能发生一些意想不到的问题。 在 stackoverflow 上找到的一个方法原理就是利用 trap 命令在脚本退出时 kill 掉它整个进程组。 把下面的代码加在脚本开头区实测管用 trap trap - SIGTERM kill -- -$$ SIGINT SIGTERM EXIT不过如果父进程是用 SIGKILL (kill -9) 杀掉的就不行了。因为 SIGKILL 时进程是没有机会运行任何代码的。 3. timeout 限制运行时间 有时候需要对命令设置一个超时时间。这时可以使用 timeout 命令用法很简单 timeout 600s some_command arg1 arg2命令在超时时间内运行结束时返回码为 0否则会返回一个非零返回码。 timeout 在超时时默认会发送 TERM 信号也可以用 -s 参数让它发送其它信号。 4. 连续管道时考虑使用 tee 将中间结果落盘以便查问题 有时候我们会用到把好多条命令用管道串在一起的情况。如 cmd1 | cmd2 | cmd3 | …这样会让问题变得难以排查因为中间数据我们都看不到。 如果改成这样的格式 cmd1 out1.dat cat out1 | cmd2 out2.dat cat out2 | cmd3 out3.dat性能又不太好因为这样 cmd1, cmd2, cmd3 是串行运行的这时可以用 tee 命令 cmd1 | tee out1.dat | cmd2 | tee out2.dat | cmd3 out3.dat
http://wiki.neutronadmin.com/news/165857/

相关文章:

  • 制作单页网站公司网络营销策略
  • 网站页面是自己做还是使用模板做视频可以领钱的网站
  • 建立网站编码 优帮云网站建设项目进度计划书
  • 网站建设全部教程运营说白了是什么意思
  • 网站建设项目心得体会网站管理后台制作
  • 注册完域名 如何做网站地方做什么网站
  • 怎样吧自己做的网站发布网络优化怎么自己做网站
  • 网站内部建设和程序wordpress 3.2 下载地址
  • 北京建设银行纪念钞预定官方网站东莞网页设计制作
  • 网站怎么做能中英文的iis搭建本地网站
  • 陕西省建设教育培训中心网站asp美食网站源码
  • 有没有免费开网站的购买域名后 可以做网站么
  • 深圳建站公司哪个济南兴田德润简介遵义市做网站的地方
  • 富德生命人寿保险公司官方网站保单查询南宁网络
  • 做网站外包公司有哪些做服装团购有哪些网站
  • 2021不良正能量免费网站app对网站的建议和优化
  • 做网站来钱快北京高端网站建设有限公司
  • 设计一个网站的价格表新冠咳嗽吃什么药
  • 南京企业网站建设网络公司有几家
  • 邢台高端网站建设公司建筑设计费一般多少钱一平方
  • 新乡网站建设制作报价方案什么网站做旅行计划
  • 网站开发关于安全问题去哪里做网站
  • 十堰做网站公司哈尔滨企业网站seo
  • 惠州网站公司清远做网站公司
  • 有什么网站可以做电子版邀请函电子商务网站开发需求文档
  • 嘉兴网站关键词广州企业展厅设计公司
  • 烟台网站推广排名公司网络组建方案
  • 网站建设技术实现深圳华强北附近租房哪里便宜
  • 上传网站程序后又怎么做百度推广外推联系方式
  • 静态网站设计怎么做如何做一家网站