Flask实现软件自动安装
2017-03-04 15:48
134 查看
最近在开发一个使用系统下发开源软件,然后自动安装,最后把安装日志显示在网页上的一个功能。开发过程中,想把安装任务放到后台跑,本来打算使用linux命令nohup等能实现,但在Flask上却使用无法实现丢到后台去运行,后续在网上找到了celery。celery实现了把安装软件的程序放到后台执行,然后把执行日志打印到文件上。ajax定时去请求这个文件,并把日志展示在网页上,如下截图(图为自动化安装zabbix agent):
celery的安装跟flask的安装一样,使用pip install celery即可。我开发使用的是python 2.7版本的,使用2.6的celery无法使用redis做为队列,可能是我找的资料还不够全面。
celery安装完成后跟flask结合的代码如下,使用的队列是redis队列,所以python还要加个redis扩展:
celery放任务在flask的写法如下,这里是ssh远程到机器执行软件的安装脚本,然后把安装的日志记录重定向到web目录下的一个txt文件,ajax来获取安装的日志:
celery任务需要启动celery进程,celery进程启动目前原理也不是太清楚,网上查到的启动方式如下(使用的redis,还需要启动redis进程):
先把开源软件和安装脚本下放到需要安装的机器上,然后ssh登录到远程机器并运行安装软件的脚本,脚本和开源软件的下放可以使用Flask借用python的scp模块来实现,函数的实现如下:
总体思路为:把软件源码和安装脚本scp到需要安装的机器上,然后ssh运行安装脚本,并把日志记录到文件中,最后ajax定时请求并把结果展示在网页上。其中运行安装脚本并记录日志需要放到后台运行。
celery的安装跟flask的安装一样,使用pip install celery即可。我开发使用的是python 2.7版本的,使用2.6的celery无法使用redis做为队列,可能是我找的资料还不够全面。
celery安装完成后跟flask结合的代码如下,使用的队列是redis队列,所以python还要加个redis扩展:
from celery import Celery app.config['CELERY_BROKER_URL'] = 'redis://127.0.0.1:6379/0' celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL']) celery.conf.update(app.config)
celery放任务在flask的写法如下,这里是ssh远程到机器执行软件的安装脚本,然后把安装的日志记录重定向到web目录下的一个txt文件,ajax来获取安装的日志:
@celery.task def my_background_task(ip, command): commands.getstatusoutput( '''ssh %s '%s' >/root/ops_web/ops_web/static/html/install_result.txt 2>&1''' % (ip, command))
celery任务需要启动celery进程,celery进程启动目前原理也不是太清楚,网上查到的启动方式如下(使用的redis,还需要启动redis进程):
/usr/local/python/bin/celery -A ops_web.celery worker
先把开源软件和安装脚本下放到需要安装的机器上,然后ssh登录到远程机器并运行安装软件的脚本,脚本和开源软件的下放可以使用Flask借用python的scp模块来实现,函数的实现如下:
from scp import SCPClient import paramiko def put_local_file(ip, user, pkey, port, remotefile, localfile): ip = ip user = user pkey = pkey port = port key=paramiko.RSAKey.from_private_key_file(pkey) ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.connect(ip,port,user, pkey=key) scpclient = SCPClient(ssh.get_transport(), socket_timeout=15.0) remotepath=remotefile localpath=localfile scpclient.put(localpath, remotepath) ssh.close()
总体思路为:把软件源码和安装脚本scp到需要安装的机器上,然后ssh运行安装脚本,并把日志记录到文件中,最后ajax定时请求并把结果展示在网页上。其中运行安装脚本并记录日志需要放到后台运行。
相关文章推荐
- Android应用自动更新功能的实现!!!软件更新,自动下载,安装
- BAT批处理实现软件的自动安装(以搜狗拼音为例)
- Motorola 企业移动终端(Mobile Computers)冷启动后软件程序自动安装的功能和实现
- 小参数实现软件自动安装
- 使用批处理实现软件的自动安装以安装搜狗拼音为例
- Android中实现软件检测更新和自动安装
- 基于visual c++之windows核心编程代码分析(60)实现系统盘定制与软件自动安装
- Android应用自动更新功能的实现!!!软件更新,自动下载,安装
- 使用批处理实现软件的自动安装
- 两行代码实现标题栏软件更新并自动安装
- 在红米note4上实现自动安装软件
- vs2010 setup 打包 安装 BAT批处理实现自动安装软件功能
- 使用批处理实现软件的自动安装
- 基于visual c++之windows核心编程代码分析(60)实现系统盘定制与软件自动安装
- GIS软件AutoIt自动安装脚本集
- WinForm中使用Web Services 来实现 软件 自动升级
- 用脚本实现自动安装windows
- 用IS6 进行 ASP 软件的打包和自动安装
- 用InstallShield 进行 ASP 软件的打包和自动安装