mobaXterm:
root 登陆:
Root权限下添加帐号密码:
打开终端输入 sudo -r useradd 用户名 /* -r 参数建立系统用户
(2)输入 sudo useradd -g root 用户名 /*这一行的命令是让你的刚刚建立的用户划分到 root 权限组下
(3)sudo passwd 用户名 /*设置你刚刚建立的密码
Pip更新命令:
Windows:
pip install –U pip
Linux:
python –m pip install –U pip
在linux环境下退出python命令行:
CRTL+D
添加环境变量:
用vim
~/.bash_profile加入path 环境变量
输入i进入(insert模式)
格式举例:
export PATH=$PATH:$HOME/bin:/usr/local/python3/bin
点击ESC退出编辑
输入:wq进行保存,然后退出
(:q不保存直接退出)
每次添加export路径之后记得source一下,然后重新打开pycharm等才会生效
RPM文件安装:
Rpm文件用root权限安装
su – root
pwd
pycharm打开工程项目:
PyCharm和Visio Studio等编译器有点不同,创建的工程不会有工程引导文件,即不能通过某一个文件直接打开整个工程。需要在PyCharm中点击:File->Open File or Project 中选择工程,注意只需要选择工程的首目录点击OK即可导入整个工程,PyCharm更类似于文件目录的形式管理工程项目。
在linux系统里编辑性地打开文件:
vi + 文件名
然后输入i进入insert模式
输入:wq进行保存
Linux 小知识:
[if !supportLists]1. [endif]在尾部加上&(and)字符表示后台运行
如$ shpycharm.sh &
jobs 列举出后台作业信息([作业号] 运行状态作业名称)后台进程又叫守护进程
后台程序基本上不和用户交互,优先级别稍微低一点
前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点
直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不着急需要结果的时候。假设用户需要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个shell在格式化的过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。
Linux后台进程也叫守护进程(daemon),试运行在后台的一种特殊进程。它独立于控制终端并且周期性执行某种任务或等待处理某些发生的事件。
守护的意思就是不受终端控制,linux的大多数服务器就是用守护进程实现的。
前台进程就是用户使用的有控制终端的进程。
可见,后台运行与前台运行的区别只在于前台运行等待子进程的退出而阻塞父进程操作。而后台运行时,可以在父进程中输入命令继续其他操作。本质上没有区别,都是给子进程发送SIGCONT信号。
[if !supportLists]2. [endif]nohup 是一个linux命令,搭配&来不挂断地运行某条命令达到后台执行的效果,默认会在根目录生成一个nohup.out文件来记录所有的log信息,也可以重定向到其他位置。可以用它来执行gunicorn来保持gunicorn进程不会被挂断。
[if !supportLists]3. [endif]zip 压缩:
解压缩:unzipyasuo.zip
压缩:zip –ryasuo.zip abc.txt dir1
我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip
[if !supportLists]4. [endif](Ubuntu)deb文件安装方法:
Dpkg –I package.deb 安装包
Dpkg –r package 删除包
(安装完成后记得添加路径)
[if !supportLists]5. [endif]打印当前路径pwd
Docker:
如果想把文件复制进入容器,可以直接在容器外面复制进入镜像文件中
比如:cp –rf 20190613/opt/cloud/mdc/hstest
红色部分为镜像路径
Linux vi/vim:
https://www.runoob.com/linux/linux-vim.html
容器里面很多东西不能用,或者需要自己安装
[if !supportLists]6. [endif]Tar压缩与解压缩
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]
# tar -czvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]
# tar -cjvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压
#压缩tar -czvf ***.tar.gz
tar -cjvf ***.tar.bz2
#解压缩tar -xzvf ***.tar.gz
tar -xjvf ***.tar.bz2
[if !supportLists]7. [endif]打印时间:
输出当前时间(时分秒):echo $(date +%T) 12:52:51
输出当前年月日:echo $(date +%F) 2014-02-21
[if !supportLists]8. [endif]查看日志log (model service在docker里面 /tmp/log/下面三个,access,error还有…common.log)
Tail –n 是显示行号,
Tail -100f test.log 实时监控100行日志
Tail –n 10 test.log 查询10行之后的所有日志
Head 跟tail是相反的,tail是看后多少行日志
Head –n 10 test.log 查询日志文件中的头10行日志
tail 命令可用于查看文件的内容,有一个常用的参数-f常用于查阅正在改变的日志文件
tail –f filename 会把filename文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要filename更新就可以看到最新的文件内容。
-f 循环读取。
Tail -300f ges_task.log | grep 想要抓取的关键字
[if !supportLists]9. [endif]Chown
Linux/unix 是多人多工操作系统,所有文件皆有拥有者,利用chown将指定文件的拥有者改为指定的用户或组,用户可以是用户或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。
-R(大写)处理指定目录以及其子目录下的所有文件。
将文件file1.txt的拥有者设为runoob,群体的使用者runoobgroup
chown runoob:runoobgroup file1.txt
[if !supportLists]10. [endif]In linux, the environmentvariable LD_LIBRARY_PATH is a colon-separated (:) set of directions wherelibraries are searched for first before the standard set of directions.
[if !supportLists]11. [endif]Yum (Yellow dog Updater, Modified)是一个shell前段软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。Yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令。
[if !supportLists]12. [endif]RPM。Red-Hat Package Manager 软件包管理器,一种用于互联网下载包的打包及安装工具,生成具有.rpm扩展名的文件,
[if !supportLists]13. [endif]touch 创建文件
[if !supportLists]14. [endif]linux 权限知识:
-rw-rw-r—这个文件的权限是664
文件权限分三段
首位代表目录还是文件,后面的三段每段三位,r代表可读,w代表可写,x代表可执行,第一段是代表文件所属的用户对它的权限,第二段是所属用户组的用户对它的权限,第三段是其他用户对它的权限
600 只有所有者有读和写的权限
644 所有者有读和写的权限,组用户只有读的权限
700 只有所有者有读和写以及执行的权限
666 每个人都有读和写的权限
755 所有用户可读该目录,但只有属主才能改变目录中的内容。(属主有读,写,执行权限;而属组用户和其他用户只有读、执行权限)
777 每个人都有读和写以及执行的权限
[if !supportLists]15. [endif]vim 中设置显示行号::set number
转到文件结尾:在命令模式输入G
转到第十行:在命令模式输入10G
删除第10行到第20行的内容:先用20G转到第20行,然后:
:9,.d
在vi中,“.”表示当前行,‘1,’表示从第一行到当前行,“d”表示删除
如果只想删除一行,把光标指到改行,然后输入d即可
dd是把当前行之前的数据全部删除
[if !supportLists]16. [endif]在终端中输入history可以查看所有历史命令
[if !supportLists]17. [endif]Top top命令是linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于windows的任管理器
根据进程查看进程相关信息占用的内存情况。进程号通过ps查看,
Pmap –d 14596
Top命令提供了实时的对系统处理器的状态监视,
术语:
Daemon:守护进程,在一个多任务的计算机操作系统中,守护进程是一种在后台执行的计算机程序
涉及模块:
Celery
装饰器的传入参数:
Bind=True: task会作为第一个参数自动传入
若:
@app.task(bind=True)
def add(x, y):
returnx+y
运行的时候会报错,add()takes 2 positional arguments but 3 were given.
改为
@app.task(bind=True)
Def add(self, x, y):
Returnx+y
使用AsyncResult(task_id).status查询任务状态
(from
celery.result import AsyncResult)
直到最大retry次数达到,一直会是retry状态,如果最后失败了,就是“failure”状态
Pid file的内容:用cat命令查看,可以看到内容只有一行,记录了该进程的ID。
Pid file的作用:防止启动多个进程副本
Pid file的原理:进程运行后会给.pid文件加一个文件锁,只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件,其他同一个程序的多余进程则自动退出。
来源:https://blog.csdn.net/qq_29113041/article/details/79508244
如果设置了celery
result的寿命,如3hours,则3hours之后任务被删除,再次使用任务id查询任务执行结果时,会返回pending。
对celery的各种查看:
https://www.jianshu.com/p/ca4d93477abb
如对celery队列的查看:
Celery –A workflow.trainJobResource inspectregistered
Gunicorn:
https://www.jianshu.com/p/52d8e3deaa16
WSGI协议
Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。
WSGI容器——Gunicorn
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。
Nohup gunicorn–worker-class=gevent NSLoger.wsgi:application –b 127.0.0.1:8000&
--worker-class来指定工作方式,如例子里面的gevent,-b指定地址和端口号。
Postgresql: 对象关系型数据库管理系统(ORDBMS),用于安全地储存数据;支持最佳做法,并允许在处理请求时检索它们。
使用help语句查看所有postgreSQL语句的语法。按照以下步骤查看postgreSQL中所有语句的语法。
安装postgreSQL后,打开psql为:程序文件->PostgreSQL 9.2-> SQL
Shell(psql)
使用以下语句查看特定语句语法:postgres-#\help&
所有PostgreSQLhttps://www.yiibai.com/postgresql/postgresql-syntax.html#article-start
两种连接方式:远程连接和本机连接
本机连接:su –postgres
Psql
\l 查看所有用户
\c + 用户名进入
\d查看所有表
SELECT * FROM + 表名,查看表内内容
就进入数据库了
记住进入数据库之后。每个命令以;结尾
在postgresql里面建表时,表名如果使用双引号,表示表名强制和双引号里面的内容一致,
但是使用SELECT *
FROM (表名)时,表名会变成小写,可以在查询时也加双引号。
Redis
Crypto
CryptoAPI
Docker:
Docker是一个开源的应用容器引擎。基于Go语言。
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app),更重要的是容器性能开销极低。
Docker 使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类
命令:docker ps 列出容器
启动docker: docker exec –it Model_servicebash
Falcon:
Api = application = falcon.API() 这样就创建了一个WSGI应用,并且设置别名为api。
WSGI应用只是一个可调用的明确定义的签名,你可以在任何支持WSGI协议的web server上托管你的应用。
Env和start_response 是标准WSGI参数
在Falcon中,我们可以把传入的请求(incoming requests)称为资源(resources)。资源只是一个常规class.包含一些遵循一定命名规则的method。每方法对应一个动作(API客户端为了获取或转换资源,去请求执行的动作)。
对于resource想要支持的任何HTTP方法,只需要简单在resource上加on_x类method,x可以是标准HTTP方法中的任何一个,例如on_get,on_put,on_head(小写)等等。
这些方法称为responders(响应器),每个responders至少需要两个参数,一个代表HTTP请求,另一个代表对应请求的HTTP响应,一般写作req和resp。route和hooks可以添加一些额外的参数。
Duck-typing:鸭子类型,在程序设计中是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由”当前方法和属性的集合”决定。名字来源于鸭子测试,“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”在duck typing中,关注的不是对象的类型本身,而是它是如何使用的。
Falcon默认是application/json作为互联网媒体类型。但是你可以设置成任何你想要的类型,比如MessagePack或者其他序列化格式。(需要安装序列化、反序列化)
资源(resource)中的每个响应器(responder)接收一个请求对象(request object)可以被用作读取headers、查询参数和请求的body。可以使用之前提到的help函数去列举request类的成员
Ipython中:import falcon
Help(falcon.Request)
每个响应器(responder)也能接收一个响应对象(response object)可以被用作设置HTTP状态码、headers和响应的body。
列举:help(falcon.Response)
当客户端(client)POST到images集合(collection)时,我们要创建一个新的Image资源,首先,我们需要指定images保存在什么地方(对于真实的service,你将需要使用一个对象存储服务,例如Cloud Files 或者Amazon S3)。
def __init__(self, storage_path):
self.storage_path= storage_path
request类和response类包含一些读取和设置通用header的便利属性,但是通过声明req.get_header和resp.set_header方法,我们总是可以使用任何header。