您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Web端执行服务器的命令和脚本

时间:2022-08-15 14:01:48  来源:  作者:陈明chenm

一、使用场景

服务器端一般都是类Unix系统,以linuxcentos使用为多,无论使用的是哪种类Unix系统,服务端都不会安装窗口插件,而是使用命令和脚本来做一切事情,在这样的场景下,登录,执行命令,执行脚本,检查服务运行状态,检查服务产生日志,检查配置这些基本操作就会频繁的用到,但在命令行模式下操作这些动作很繁琐。比如检查某个服务是否是运行状态,需要先登录服务器,然后在进程中再查找该服务的进程是否存在。这里就介绍怎样通过web端来执行服务器端动作的方法,简化操作,提升工作效率。

二、选取实现方式

设计这个实现时比较了两个实现方式:

1、通过JAVA的Runtime类,执行命令和脚本。需要创建和维护一个工程,在工程里对接口权限控制也方便,但新加脚本和操作时需要修改工程,重新发布工程。

2、使用CGI接口,配置便捷,使用灵活,直接在服务器上写脚本,通过接口的通用路径就可以访问使用,但无法控制接口访问权限。

由于这个接口是使用在测试系统,方便,灵活是首选,权限问题就显示的不那么重要了。

CGI是一个很古老的技术,后来随着java servlet技术的兴起,在生产场景已经没有CGI的一点空间了,但它的灵活,便捷正好用在测试环境上。

三、配置CGI接口

3.1、开启Tomcat的CGI配置

tomcat和Apache等中间件已经内置了CGI功能,只是默认是非启用状态。此处以tomcat为例,配置CGI接口。

修改点1、在Tomcat的 conf/web.xml 中释放下面CGI相关的两段内容

第一段:

 

<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>

第二段:

 

<servlet-mApping>

<servlet-name>cgi</servlet-name>

<url-pattern>/cgi-bin/*</url-pattern>

</servlet-mapping>

修改点2、在Tomcat的 conf/context.xml 中给标签增加属性。

在</Context>标签中添加属性 privileged = "true",因为默认情况下Tomcat是不允许web应用使用容器内的Servlet的,web应用只能使用自己项目的Servlet。

3.2、创建一个空项目,定义要执行的脚本

tomcat中开启CGI配置时,没有修改文件路径和访问路径,那空项目就按照默认路径创建目录即可。

在tomcat路径下,直接 mkdir -p webapps/test/WEB-INF/cgi,创建CGI项目目录完毕。

然后在webapps/test/WEB-INF/cgi路径下创建一个文件a,a的内容如下

 

#!/bin/bash

echo "Content-Type: text/plAIn"

echo

#上面内容是CGI脚本格式,必须存在

 

#下面内容是自定义要执行的动作

echo "Today is:"

date

3.3、执行a的接口访问路径

http://localhost:8080/test/cgi-bin/a

四、参数化cgi接口

4.1、实际场景

此时,CGI接口已经配置完毕了,尽管功能已经完毕,但还是不满足实际的使用场景,现在的一个接口只对应一个功能,不能复用。要满足实际的使用场景,就要参数化,传递的参数可以是脚本名称,机器的ip,服务名称,进程名称等等,这样接口的通用性就大大增加了。

4.2、初步解决方案

若想脚本参数化就要解决服务器端的传参和url中传参不一致的问题。url中使用“&”和“参数名=参数值”的传参形式,而服务器端是使用的是空格+直接参数值得形式。需要在执行的a脚本前,先经过一个转换脚本,转换脚本需要先切割url,分成几部分,取出参数和执行的a脚本,再重新拼在一起来执行,那就变成url需要先访问转换脚本,把实际的a脚本和参数都作为参数传进来,处理流程变复杂了。

4.3、网上一个神脚本

直到后来在互联网上最终找到了一个完美的解决方案。找到了一个名字叫“proccgi.sh”的脚本,脚本里的注释中描述是 Frank Pilhofer在1995年写的。我原封不动的拿过来使用了(脚本下载:链接:
https://pan.baidu.com/s/1oZbN13Eog3OKld93f6hEkw?pwd=chen

提取码:chen)。这个脚本设计的很巧妙,它不在传输中间处理url再拼接,而是把url直接都传进执行的a脚本里,然后在a脚本中利用了“eval”命令的的二次扫描功能,扫描出需要的参数,然后把参数放一个特殊的key-value形式的环境变量里,使用的时候直接从环境变量里面去取。

例如:

url:http://localhost:8080/test/cgi-bin/a?ip=115&servername=customer&thread=aabbcc

a脚本改造如下:

#!/bin/bash

 

eval `proccgi.sh $*` # 解析参数

echo "Content-Type: text/plain"

echo

 

# ############

echo $FORM_ip

echo $FORM_servername

echo $FORM_thread

五、Web页面处理

有以下几种情况:

1、对页面展示无样式要求的,接口链接直接新开浏览器窗口,接口返回的数据会直接显示在浏览器中。

2、页面有格式的,需要通过ajax触发接口,接口返回值通过innerhtml直接填充到页面的展示区域。

3、对于那些耗时较长的任务,接口在还没有返回值的时候,页面停留在加载状态,此时从页面也无法判断是否出现未知问题。这时可以给页面放一个等待的图片,定义一个标志位给它放一个默认值,然后js轮训判断这个标志位的值,当接口的shell处理完成,接口返回时,要变更标志位的值,轮训发现变更后,就可以把接口返回内容替换掉等待图片全部显示在页面上了。

 

六、结语

在定义环境的时候,就尽量定义的通用一些,规律一些。这样可以维护一些通用脚本,通过传入变量参数来做动作。使在服务器中环境维护和定位问题都不再繁琐。



Tags:脚本   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
短视频脚本 原来这么容易写哇~
2023-11-29  Search: 脚本  点击:(57)  评论:(0)  加入收藏
手把手教你写一个Shell脚本部署你的服务
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署...【详细内容】
2023-11-28  Search: 脚本  点击:(139)  评论:(0)  加入收藏
Linux服务器超级实用的Shell脚本,建议收藏!
Shell 脚本是一种强大的工具,可以在各种领域中用于提高工作效率、简化任务和自动化常见工作流程。无论是系统管理、数据处理、任务自动化还是快速原型开发,Shell 脚本都是一种...【详细内容】
2023-11-07  Search: 脚本  点击:(294)  评论:(0)  加入收藏
Python脚本支持OC代码重构实践:模块调用关系分析
在软件开发中,经常会遇到一些代码问题,例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降,增加维护成本,同时也会影响到开发效...【详细内容】
2023-10-27  Search: 脚本  点击:(247)  评论:(0)  加入收藏
暴击联盟传世脚本怎么用 斩魔无双传世手游脚本下载攻略
哈喽大家好,游戏里我们每天都需要花费大量时间去挂机、刷材料、升级,时间上对上班族非常不友好,这时候我们就需要可以解放双手的脚本了,自动刷boss、自动做活动、自动挂机,减少不...【详细内容】
2023-10-17  Search: 脚本  点击:(55)  评论:(0)  加入收藏
帮你解决繁琐重复的工作任务 用Python自动化脚本
重复性的任务总是耗时且枯燥。想象一下一张一张地剪切100张照片,或者执行诸如获取API、纠正拼写和语法等任务,这些都需要大量时间。为什么不将它们自动化呢?在今天的文章中,将分...【详细内容】
2023-09-27  Search: 脚本  点击:(256)  评论:(0)  加入收藏
Shell编程:命令行与脚本编程的结合
在计算机领域,Shell 是一个命令行解释器,它允许用户与操作系统进行交互。通过Shell,用户可以输入命令并执行各种任务。此外,Shell 还可以用于编写脚本,实现自动化管理和提高工作...【详细内容】
2023-09-07  Search: 脚本  点击:(214)  评论:(0)  加入收藏
PowerShell系列之PowerShell通过脚本方式运行笔记
上一篇文章讲解了Powershell通过交互环境运行命令的相关知识,今天给大家介绍实际工作当中使用最频繁的方式&mdash;&mdash;通过脚本运行,简单来说就是和咱们实际编写代码一样,先...【详细内容】
2023-08-28  Search: 脚本  点击:(293)  评论:(0)  加入收藏
Docker容器中的Postgresql备份脚本异常解决办法
本文基于K8S中Docker容器对postgres数据库进行备份的操作,编写好脚本后,手动执行脚本是正常的,但是crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kub...【详细内容】
2023-08-28  Search: 脚本  点击:(396)  评论:(0)  加入收藏
疯传全网网络10个运维巡检脚本以及使用小技巧
第1章 前言巡检脚本在网络运维中非常重要,近期客户想要一些简单的脚本实现自动化常规项的检查,本文主要介绍一些常见巡检脚本和使用方法。 第2章 脚本案例1. 网络连通性检查...【详细内容】
2023-08-23  Search: 脚本  点击:(317)  评论:(0)  加入收藏
▌简易百科推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  coderidea  微信公众号  Tags:Nginx   点击:(60)  评论:(0)  加入收藏
哪种服务器操作系统更好呢?
在当今的IT世界中,服务器操作系统扮演着至关重要的角色。它们是确保服务器能够高效、安全地运行的关键因素。然而,对于许多人来说,服务器操作系统的种类和特点可能是一个复杂的...【详细内容】
2024-01-30    简易百科  Tags:操作系统   点击:(76)  评论:(0)  加入收藏
什么是VPS服务器
VPS服务器是一种虚拟化技术,它将一台物理服务器划分为多个虚拟的独立服务器,每个虚拟服务器都可以拥有自己的操作系统、运行环境、应用程序等。这种技术使得每个虚拟服务器可...【详细内容】
2024-01-30    简易百科  Tags:VPS服务器   点击:(71)  评论:(0)  加入收藏
VPS服务器下载速度慢?这五招帮你提速
VPS服务器下载速度慢可能会让用户感到沮丧,尤其是对于需要大量下载和上传数据的用户。幸运的是,有一些方法可以帮助您提高VPS服务器的下载速度,使您的在线体验更加顺畅。在本文...【详细内容】
2024-01-30  IDC行业观察者    Tags:VPS服务器   点击:(57)  评论:(0)  加入收藏
美国VPS和英国VPS:地理位置对服务器性能的影响
在今天的数字时代,VPS已成为在线业务和网站托管的关键组成部分。然而,选择合适的VPS主机服务时,地理位置通常被忽视,尽管它对服务器性能有着重要的影响。本文将探讨美国VPS和英...【详细内容】
2024-01-26  IDC行业观察者    Tags:服务器   点击:(55)  评论:(0)  加入收藏
如何判断服务器所需带宽:基于业务需求和流量模式的关键考量
在选择服务器时,带宽是一个重要的考虑因素。带宽的大小直接影响到网站的加载速度和用户的访问体验。那么,如何判断服务器需要多大的带宽呢?本文将为你揭示这一关键问题的答案...【详细内容】
2024-01-26  源库科技    Tags:服务器   点击:(75)  评论:(0)  加入收藏
服务器内存空间及IO操作原理解析
服务器的内存空间分为内核空间和用户空间,而我们编写的程序通常在用户空间中运行。在进行读写操作时,我们直接操作的是用户缓冲区,而用户缓冲区的内容来自于内核缓冲区。这种内...【详细内容】
2024-01-23  王建立    Tags:服务器   点击:(44)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  敲代码的小动    Tags:Nginx   点击:(63)  评论:(0)  加入收藏
服务器证书和SSL证书有啥区别?
在互联网经济时代,随着越来越多的信息以及合作都是从企业官网开始的,因此绝大多数企业都会为自己的网站配置SSL证书,以提高安全性。在接触SSL证书时,也有很多人称之为服务器证书...【详细内容】
2024-01-10  安信SSL证书    Tags:服务器证书   点击:(65)  评论:(0)  加入收藏
宝塔面板怎样部署java项目?
宝塔面板怎样部署java项目?在使用宝塔面板部署Java项目之前,需要确保已经安装了Java Development Kit (JDK)。接下来,将介绍如何使用宝塔面板来部署Java项目的步骤。步骤一:安装...【详细内容】
2024-01-09  西部数码    Tags:宝塔面板   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条