四.应用类shell
目前行里自动化工具越来越多,无论是应用的MAOP或系统的SMDB,自动化实现都还是日常运维脚本的调用,结合日常运维的一些经验,脚本中就更需要考虑周全和控制风险。这里介绍一些结合运维场景的脚本应用,希望规避以前犯过的错,重点在控制风险。
1) 支持交互式脚本的应用 很多脚本中需要进行交互,在规避风险的同时,需要通过自动化工具发布来支持交互,可以使用expect,示例如下:
也可以使用curl工具来替代简单的交互:
#FTP SFTP下载
curl-u ftpuser:ftppassword -O "sftp://ftp_ip:ftp_port/pathfile"
#FTP SFTP上传
curl-u ftpuser:ftppassword --ftp-create-dirs-T upfile "sftp://ftp_ip:ftp_port/filepath/upfile"
2)脚本规范执行和日志追溯 直接执行的脚本很危险,要提示用户如何使用脚本,并记录日志以便跟踪。
示例如下:
3)脚本的并发锁控制 避免多人同时执行或并发同时执行的异常问题,建议增加锁机制,示例如下:
4)控制脚本不退出的风险 周期频繁执行的脚本,需要防止脚本hang住不退出,导致后续脚本再次执行。
5)避免集中发布脚本造成的风险 使用ftp、sftp传输、下载文件,或者集中访问存储端口时,尽量增加发布对象散列,避免集中操作造成存储端口拥堵,跨防火墙流量超限报警等影响。
6)避免文件无限增长的风险 向一个文件中追加数据时,一定要设置阀值,必要时清空,避免文件无限增大:
目录增加清理过期文件策略,避免产生的文件越来越多,造成文件节点用尽:
目录中的文件过多,会报参数太长错误无法删除,建议放在循环中遍历删除:
五.总结
鉴于以上脚本,我们可以从中汲取一些经验,规避一些风险:
通过增加日志记录输出和脚本执行的方法说明,并自动交互和传递参数,避免执行脚本的操作风险;利用文件锁机制和运维中一些规避风险的方法,使得脚本自动执行起来更便捷更安全。
- 通过规范类脚本的定义,标准常量定义、清晰的注释、函数和变量大小写用法,细节中可以看出严谨,即使只有几行,也能体现出一名优秀脚本开发人员的素质。
- 通过易错类脚本中的“坑”,使得 shell面向过程的编写更得心应手,让脚本规范的同时,逻辑也更严谨清晰,避免了错误,也提高了脚本的开发效率。
- 通过运维场景的脚本应用,规避各种开发和执行过程中的风险,使得shell脚本不仅能支持自动化发布,更可以全面智能化的为运维服务。