@cyysu
2017-10-23T12:45:31.000000Z
字数 3618
阅读 804
- 时间:2017年10月23日
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com/2869905223@qq.com/微信lwyx1413
- 版本:4.0
- 描述:ARM上的html代码实现。
嵌入式Linux
CGI主要的功能是在WWW环境下,藉由从客户端传递一些讯息给WWWServer,再由WWWServer去启动所指定的程式码来完成特定的工作。所以更明确的说,CGI仅是在WWWServer上可执行的程式码,而她的工作就是控制讯息要求而且产生并传回所需的文件。使用CGI,你的Server可以读取并显示在客户端无法读取的格式(像是SQLDataBase)。而且可以像闸道(Gateway)一样,在伺服端和客户端之间,产生客户端所需要的讯息。基本上,在此种主从式(Client/Server)的环境之下,其IPC(InterProcess Communication)的协定是利用讯息传递及记忆体分享(环境变数)的方式来完成。CGI有其特定的写法及规格,必须遵守其原则,方可达到主从端资讯交流的目的。
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
i="0"
echo -e "Content-type: text/html \n\n"
echo "<html>"
echo "<head>"
echo "<title>系统状态</title>"
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
echo "</head>"
echo "<body>"
echo "<center>"
echo "<h3>系统状态(5秒刷新一次)</h3>"
echo "</center>"
echo "<hr>"
echo "<script>"
echo "setTimeout(\"javascript:location.href='./system.cgi'\", 5000);"
echo "</script>"
echo "<center>"
echo "<form>"
echo "<table width=\"75%\" style=\"table-layout:fixed;\">"
echo "<tr>"
echo "<td>服务名</td>"
echo "<td>内存使用率</td>"
echo "<td>当前状态</td>"
echo "</tr>"
wr top -n 1 > /tmp/top.txt
cat /tmp/top.txt | head -n 14 | tail -n 11 | while read line
do
i=`expr $i + 1`
if [[ $i -eq 1 ]];then
continue
fi
command=`echo ${line} | awk '{print $8}'`
memory=`echo ${line} | awk '{print $6}'`
cpu=`echo ${line} | awk '{print $7}'`
echo "<tr>"
echo "<td>"${command}"</td>"
echo "<td>"${memory}"</td>"
echo "<td>"${cpu}"</td>"
echo "</tr>"
done
echo "</table>"
echo "</form>"
echo "<br>"
echo "<hr>"
# 显示运行程序表格
echo "<h3>正在运行的应用程序</h3>"
echo "<form>"
echo "<table width=\"75%\" style=\"table-layout:fixed;\">"
echo "<tr>"
echo "<td>应用程序名称</td>"
echo "<td>  </td>"
echo "<td>当前状态</td>"
echo "</tr>"
# 这里查OPENCUA进程是否在运行
appName=`ps -a | grep -i OPEN | grep -v grep | cut -d " " -f7`
if [ "$appName" = "" ];then
status="挂起"
appName="./OPUCA"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="red">"${status}"</font></td>"
echo "</tr>"
else
status="运行"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="green">"${status}"</font></td>"
echo "</tr>"
fi
# 这里查NEWTON进程是否在运行
appName=`ps -a | grep -i NEWTON | grep -v grep | cut -d " " -f7`
if [ "$appName" = "" ];then
appName="./NEWTON"
status="挂起"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="red">"${status}"</font></td>"
echo "</tr>"
else
status="运行"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color=\"green\">"${status}"</font></td>"
echo "</tr>"
fi
# 这里查MODBUS进程是否在运行
appName=`ps -a | grep -i MODBUS | grep -v grep | cut -d " " -f7`
if [ "$appName" = "" ];then
status="挂起"
appName="./MODBUS"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="red">"${status}"</font></td>"
echo "</tr>"
else
status="运行"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="green">"${status}"</font></td>"
echo "</tr>"
fi
# 这里查MQTT进程是否在运行
appName=`ps -a | grep -i MQTT | grep -v grep | cut -d " " -f7`
if [ "$appName" = "" ];then
status="挂起"
appName="./MQTT"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="red">"${status}"</font></td>"
echo "</tr>"
else
status="运行"
echo "<tr>"
echo "<td>"${appName}"</td>"
echo "<td></td>"
echo "<td><font color="green">"${status}"</font></td>"
echo "</tr>"
fi
echo "</table>"
echo "</form>"
echo "</center>"
echo "</body>"
echo -e "</html>\n\n"
我这里举的例子是ARM板的web控制终端。我们这里采用的是shell方式去编写的程序,当然我们还可以采用其他脚本编写,比如C或者python,在比如perl等等。通过观察上面的例子我们可以发现这不就是在编写脚本嘛,对没错,其实这就是编写脚本,只不过在浏览器那边访问的时候这些代码被解析成了html代码,这样就可以看到我们网页了,如果这些程序在没有启动http服务器的那么浏览器访问的就是这些文件的内容。
由于PC上有很多http服务器了,这里我给出一个arm端的http服务器。
这里说明一下使用方法:
将这个程序放入你的网站根目录,程序会默认寻找你根目录下的index.html去解析,同时他还支持加入h5或者css3等网页解析。程序默认开启的端口是8080。下面给出一个效果图。
[root@3352-T web]# ls
banner.html css/ img/ logo.html test.html webs*
bottom.html graphics/ index.html main.html tree.html
cgi-bin/ httpd* js/ menu.html um/
这里给一个演示动画。
支付宝 微信