有时候,我们需要进行远程控制。比如远程开灯、开锁,其本质都是远程执行一个脚本,或者发送一个tcp请求,让远程硬件执行动作。
服务端
今天要介绍的是远程执行脚本,完成网站的自动部署。起因是权限原因,使用者没有权限,每次部署时都需要手动切换成管理员用户。这个案例中,以管理员身份启动一个http服务器,监控网站部署请求,如果收到请求就执行部署脚本。这样通过http请求绕开了权限问题。
下面是python的httpserver端代码,在收到get请求后,通过os.system("script")
来执行脚本。
from http.server import HTTPServer, BaseHTTPRequestHandler
import os
class myResquestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
os.system("/bin/csh deploy.csh")
self.wfile.write("updated successfully".encode('utf-8'))
if __name__ == '__main__':
host = ('0.0.0.0', 8001)
server = HTTPServer(host, myResquestHandler)
print("Starting Renato Auto Deployment Server")
server.serve_forever()
注意:
这里的0.0.0.0
表示广域网的所有计算机都可以控制,包括手机等。如果只接受本机,可以用127.0.0.1
。
客户端
客户端可以是电脑或者手机浏览器,也可以本地脚本。这里以本地shell脚本为例:
curl http://192.168.0.16:8001/deploy