如何制作Linux程序启动脚本

您所在的位置:网站首页 linux开机自启动程序关闭方法 如何制作Linux程序启动脚本

如何制作Linux程序启动脚本

2023-08-19 04:38| 来源: 网络整理| 查看: 265

在近期的工作中,与合作伙伴搭建了一个POC的演示环境,演示环境得到了客户的肯定,但是客户提出了新的需求,就是要在服务器重启时,所有的演示相关环节不能启动,需要等特定程序启动之后再进行启动操作。

在接到需求后,公司给出通过脚本启动的方案,将演示环境相关程序的启动开启功能停止,然后通过脚本的形式启动,这就需要制作Linux的执行脚本。在制作的过程中,对于Linux下的脚本、服务的概念有了新的理解和认知,下面与大家进行分享。

1程序服务

制作启动脚本需要明确两件事情,一是哪些程序需要启动,二是如何制作脚本。比如本次项目需要启动的程序就有数据库、Nginx、NFS、Redis、K8S集群以及UMC(云管理平台)等多种程序,这些程序的启动方式也各有特点。

1.1基础概念

为响应客户需求,首先要了解哪些程序可以开机自启以及如何实现开机自启,然后关闭开机自启,第三步是通过命令验证启动方式,最后是制作脚本。在平时的项目中,软件都是部署在Linux里,有些软件包装成服务,服务可以通过Linux的管理功能进行设置开机启动或者不启动。

设置开机启动的方法有三种,第一种是利用Linux的系统功能,需要桌面配置;第二种是利用chkconfig命令;第三种是制作启动脚本,将脚本加入到Linux开机程序中,实现自动启动。下面主要介绍后两种方式。

1.2启停方法

在Linux系统中,启动的命令主要有chkconfig和systemctl,二者的区别在于chkconfig只是针对服务的管理,而systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。相关命令参考如下:

Chkconfig命令:

Systemctl命令:

2相关概念

虽然客户需求是开机之后手动开启程序,考虑到项目运行环境包括数据库、Nginx、NFS、Redis、K8S集群等等一系列程序,让客户逐个开启很困难。因此考虑制作一个一键启动的脚本,涵盖各个程序。制作脚本采用的是shell语言。

2.1概念理解

Shell严格来说分为Shell和Shell脚本(shell script),Shell语言是一个用C语言编写的程序,Shell 既是一种命令语言,也是一种程序设计语言。Shell脚本是一种为 Shell编写的脚本程序,但是在日常使用时,通常Shell默认指的就是Shell脚本。

2.2基础语法

了解一门语言应分为基础语法和灵活应用两个方面,基础语法主要是掌握语言的常规书写语法、变量处理及逻辑处理,灵活应用应该包括方法使用及其他常用命令使用方法等。

2.2.1基础语法

制作Shell语法非常简单,只需在首行声明即可。

Shell与大多数脚本语法相同,#表示注释,但是在Shell里首行非常重要,在这里#!表示Shell的脚本需要什么解释器执行,后面是程序的绝对路径,这里用到的是bash解释,除此之外,还有csh、tcsh、ash等等。

简单的做一行输出,用到的命令为echo,同时需要注意,如果是linux 下执行,需要对脚本进行授权,常用命令如下:

2.2.2变量处理

在脚本里变量的写法是直接写即可,不需要在前面加定义符,但是在使用时需要加$,其中{}可以写也可以不写,写{}是为了区分变量的范围,比如下图叹号就在变量之外。

 

执行效果如下:

 

同时需要注意,在Shell中,变量也有作用域,在程序执行时,变量后赋值会将原来的值覆盖,对此Shell有只读变量的概念,样例如下:

执行效果:

 

变量的设置应该遵守以下规则:

1.命名只能使用英文字母、数字和下划线,首个字符不能以数字开头;

2.中间不能有空格,可以使用下划线(_);

3.不能使用标点符号;

4.不能使用bash里的关键字(可用help命令查看保留关键字)。

2.2.3逻辑处理

逻辑处理也叫流程控制,程序的执行分为顺序、分支(判断)、循环三种类型。之前的变量中已经按照顺序执行,还剩分支和循环两个类型。

2.2.3.1分支逻辑

分支语法写法如下:

 

执行效果如下:

 

2.2.3.2循环逻辑

Shell对于循环支持4种形式的循环,包括for循环、while循环、until循环和case循环。这几种循环与java语法类似,只是语法细节有些许差异,这里只用一个循环距离,写法如下:

 

执行结果如下,同时要注意,Shell脚本同样支持break、continue等跳出循环的方式。

 

2.3灵活应用

在了解基础语法之后,可以尝试对Shell作进一步了解,比如字符拼接、数字计算、方法调用及系统接入等等。

2.3.1拼接结算

拼接是对字符串的拼接,虽然在Shell中没有数据类型概念,但是可以通过双引号区分字符与数字,字符串的拼接直接写在一起就可以,可以参考2.2.2变量处理相关截图,字符串的截取写法如下:

关于数据的计算,支持四则运算或与非逻辑运算等等,在Shell有一类是针对文件的特殊判断运算,在后续的使用应该会用到,这里做一下说明。

文件部分样例如下:

 

执行效果如下:

 

2.3.2文件引入

文件引入相当于java中的import引用,目的是从服务器其他路径引入资源,可以使用关键字source和点(.)引用,路径可以是相对路径,也可以是绝对路径。具体样例如下:

 

执行效果如下:

 

3脚本制作 3.1脚本编写

在了解Shell语法之后,就可以着手开始制作项目脚本,脚本制作的整体思路是明确程序的依赖环境,然后验证启动命令,将启动命令迁移到脚本中,最后进行优化调整以及测试工作。最终效果如下:

 

3.2脚本测试

制作sh脚本,测试是非常重要的环节,通常测试包含三个层面,分别是可行性测试、功能测试和优化测试。可行性测试是在脚本制作过程中,针对命令做的可行性论证,确认命令可行后写入脚本。

功能测试是指在脚本制作完成后,进行综合测试,虽然命令通过了测试,但是在脚本整体制作中,存在命令好使但是脚本不好使的情况,不能掉以轻心,需要整体的功能测试。最后是优化测试,即便功能实现,也应该考虑脚本的复用性、脚本性能等多方面因素,相关的针对性测试也要到位。

3.3优化考虑

脚本在制作完成后,应该考虑优化,优化主要从两方面考虑,一是功能调整,二是复用性。功能性能调整主要是考虑功能的执行顺序,程序执行中间隔,避免程序启动时依赖没有启动。

复用性优化主要是考虑脚本在关键位置实现变量化,多种使用场景的适配,脚本复用的同时也是对实施的考验,要求实施时有标准的安装规范,比如安装位置、配置名称等等。

4心得体会

本次脚本制作的过程并不复杂,但是其中涉及的软件比较多,而且这种脚本编程接触的比较少,因此制作时不太有把握。经过这次实践,对于产品环境、运行环境都有了进一步的认知,对于自己是一个比较好的提升。

4.1语法掌握

对于Shell语法有了基础的掌握,但是对于方法以及参数的传递还有很多不理解的地方,后续应该抽时间把这部分补上,这样也算简单了解了一门语法,同时考虑向部门员工传递知识,作为部门技能的一部分。

4.2运维使用

本次项目对Shell脚本有了一定了解,在后续运维中应该考虑脚本化的执行一些程序。目前来看,对于一些没有用云平台的项目,在后续运维时可以考虑脚本执行启动命令,另外对于一些调用和测试可以考虑脚本化执行,具体场景还需要考虑。

4.3厚积薄发

知识的掌握在于积累,比如本次在对Shell有了一定理解之后,才能写出一个基础的启动脚本。即便这样,在实践的过程中也存在一定问题,比如没有考虑复用性、扩展性,使用的都是基础语法,没有动态监听等等。

需要很深的了解才能写好脚本,需要对公司的产品有很深的了解才能讲好方案,厚积薄发是每个人职业生涯的必经阶段,正如公司提倡的“诚信义善,志攻博专”,既要广泛涉猎,又要有所专长,切不可因为做了一点事情就以为理解了全部,要不断积累才能走的更远。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3