【转载】Supervisord 的使用

Linux [[Supervisor]] 【转载】Supervisord 的使用 Supervisor(http://supervisord.org/)是用 Python 开发的一个 client/server 服务,是 Linux/Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死, supervisort 监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写 shell 脚本来控制。 因为 Supervisor 是 Python 开发的,安装前先检查一下系统否安装了 Python2.4 以上版本。 下面以 Ubuntu 18.04,Python2.7 版本环境下,介绍 Supervisor 的安装与配置步聚: 安装 supervisor sudo apt-get install supervisor supervisor 安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是 supervisor 的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 配置 运行 supervisord 服务的时候,需要指定 supervisor 配置文件,如果没有显示指定,默认在以下目录查找: # $CWD表示运行supervisord程序的目录。 $CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf /etc/supervisor/supervisord.conf (since Supervisor 3.3.0) ../etc/supervisord.conf (Relative to the executable) ../supervisord.conf (Relative to the executable) 可以通过运行 echo_supervisord_conf 程序生成supervisor的初始化配置文件,如下所示: mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf 配置文件参数说明 supervisor 的配置参数较多,下面介绍一下常用的参数配置,详细的配置及说明,请参考官方文档介绍。 注:分号(;)开头的配置表示注释 ...

【转载】你可能还没有使用过的python3特性---但你应该用

Python 【转载】你可能还没有使用过的python3特性—但你应该用 很多人因为看到了Python EOL而将代码从 python2.x 迁移到了 python3.x。不幸的是,大多数的 python3 代码看起来很像 python2.在下面我将展示一些例子来说明部分 python3 特性,希望它们可以让你用 python 解决问题更简单。 以下的代码将以 Python3.7 书写。 f-Strings(3.6+) 在任何编程语言中,没有字符串结构,都很难以工作。大多数人使用 format 格式化文本,如下所示: user = "Jane Doe" action = "buy" log_message = 'User {} has logged in and did an action {}.'.format( user, action ) print(log_message) # User Jane Doe has logged in and did an action buy. 除此之外,Python3 还提供了一种通过 f-string 进行字符串插值的灵活方法。使用 f-strings 的上述代码如下所示: user = "Jane Doe" action = "buy" log_message = f'User {user} has logged in and did an action {action}.' print(log_message) # User Jane Doe has logged in and did an action buy. 有时候会写一种很蠢的写法,如果用 f-String 就能解决,实例如下: ...

【转载】在 Oracle 中设置自增列

database Oracle 【转载】在 Oracle 中设置自增列 如果你经常使用 MySQL,你肯定对 AUTO_INCREMENT 非常熟悉,因为经常要用到它。 一、什么是自增列 ? 自增列是数据库中值随插入的每个行自动增加的一列。它最常用于主键或 ID 字段,这样每次增加一行时,不用指该字段的值,它就会自动增加,而且是唯一的。 当在 MySQL 中定义列时,我们可以指定一个名为 AUTO_INCREMENT 的参数。然后,每当将新值插入此表中时,放入此列的值比最后一个值加 1。 但很不幸,Oracle 没有 AUTO_INCREMENT 功能。 那要如何在Oracle中做到这一点呢? 二、在 Oracle 11g 中设置自增字段 1. 创建表 首先创建一张用于测试的表: CREATE TABLE "TEST" ( ID NUMBER(11) PRIMARY KEY, NAME VARCHAR2(50BYTE) NOT NULL ); 2. 创建序列 然后创建一个名为 TEST_ID_SEQ 的序列(序列名称自己随意设定): CREATE SEQUENCE TEST_ID_SEQ INCREMENT BY 1 START WITH 100 MAXVALUE 999999999 NOCYCLE NOCACHE; 如果要删除序列,可以使用下面的 SQL 命令: DROP SEQUENCE TEST_ID_SEQ; 对 SEQUENCE 的一些说明: INCREMENT BY 用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。 START WITH 用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值,当序列号顺序递减时默认值为序列号的最大值。 MAXVALUE 用于指定序列生成器可以生成的组大序列号(必须大于或等于 START WITH,并且必须大于 MINVALUE),默认为 NOMAXVALUE。 MINVALUE 用于指定序列生成器可以生成的最小序列号(必须小于或等于 START WITH,并且必须小于 MAXVALUE),默认值为 NOMINVALUE。 CYCLE 用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为 NOCYCLE。 CACHE 用于指定在内存中可以预分配的序列号个数(默认值:20)。 到这一步其实就已经可以实现字段自增,只要插入的时候,将 ID 的值设置为序列的下一个值 TEST_ID_SEQ.NEXTVAL 就可以了: ...

bumpversion的简单学习

Python Python Module bumpversion 的简单学习 如果只是闭门造车,写点小脚本的话可以不用在意版本的问题。 但是一旦脚本或者项目需要被他人使用,如果没有版本信息,又出现了 bug,那么你很难定位他使用的是什么版本,这个 bug 到底有没有修复,有了版本信息你可以很确定一些 feather 或者 bug 是否实现。 最简单的版本信息制作,在项目下新建一个 VERSION 文件,在该文件中记录版本号,做了些代码修改就手动修改 VERSION。 但是这样会带来更多问题,你只能在修改过 VERSION 后做个 git commit 才能够更好地跟踪;多个文件会提到版本信息该怎么处理;大版本和 patch 版本如何区分? bumpversion 横空出世,给上述的问题给了些答案。Bumpversion 是一个简化工程版本号修改的工具,可以通过 pip 安装。使用它可以一键将当前工程的文件中的旧版本号替换成新版本号还可以顺便 Commit 和 打上 Tag(如有需要)。 语法 bumpversion [options] part [file] 这里面 part 是关键,它可以简化很多事。 使用 先看一个简单的例子: 工程里有 main.py 和 Makefile 两个文件。 main.py 打印当前的版本号: version = '0.0.1' if __name__ == '__main__': print(version) Makefile 将 py 文件压缩起来: VERSION = 0.0.1 .PHONY: build build: tar zcvf tellversion-v$(VERSION).tar.gz main.py 要使用 Bumpversion 需要在目录里添加 .bumpversion.cfg 文件: ...

dmidecode 的使用

Linux dmidecode 的使用 dmidecode 命令可以让你在 Linux 系统下获取有关硬件方面的信息。dmidecode 的作用是将 DMI 数据库中的信息解码,以可读的文本方式显示。由于 DMI 信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等。 DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI 信息的收集必须在严格遵照 SMBIOS 规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS 和 DMI 是由行业指导机构 Desktop Management Task Force(DMTF) 起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。 DMI 充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI 的主要组成部分是 Management Information Format(MIF) 数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过 DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 语法 dmidecode [选项] 选项 -d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。 -h:显示帮助信息。 -s:只显示指定DMI字符串的信息。(string) -t:只显示指定条目的信息。(type) -u:显示未解码的原始条目内容。 –dump-bin file:将DMI数据转储到一个二进制文件中。 –from-dump FILE:从一个二进制文件读取DMI数据。 -V:显示版本信息。 dmidecode参数string及type列表: Valid string keywords are: 下列选项,可通过 dmidecode -s xxx 来查看,对于特定的单项,更方便获取结果。 bios-vendor bios-version bios-release-date system-manufacturer system-product-name system-version system-serial-number system-uuid baseboard-manufacturer baseboard-product-name baseboard-version baseboard-serial-number baseboard-asset-tag chassis-manufacturer chassis-type chassis-version chassis-serial-number chassis-asset-tag processor-family processor-manufacturer processor-version processor-frequency Valid type keywords are: 下面选项,可通过 dmidecode -t xxx 来获取信息,一般是某一单类别硬件信息。 ...

sed 匹配内容的前一行和后一行添加内容

Linux sed 匹配内容的前一行和后一行添加内容 在某行的前一行或后一行添加内容 具休操作如下: # 匹配行前加 sed -i '/allow 361way.com/iallow www.361way.com' the.conf.file # 匹配行前后 sed -i '/allow 361way.com/aallow www.361way.com' the.conf.file 而在书写的时候为便与区分,往往会在i和a前面加一个反加一个反斜扛。代码就变成了: sed -i '/2222222222/a\3333333333' test.txt sed -i '/2222222222/i\3333333333' test.txt a 是 append,行后加;i 是 insert,行前加。 配合find查找的内容处理,如下: find . -name server.xml|xargs sed -i '/directory/i <!--' find . -name server.xml|xargs sed -i '/pattern="%h/a -->' 在某行(指具体行号)前或后加一行内容 sed -i 'N;4addpdf' a.txt sed -i 'N;4ieepdf' a.txt 这里指定的行号是第四行 。 删除指定行的上一行或下一行 # 删除指定文件的上一行 sed -i -e :a -e '$!N;s/.*n(.*directory)/1/;ta' -e 'P;D' server.xml # 删除指定文件的下一行 sed -i '/pattern="%/{n;d}' server.xml 转载说明 sed 匹配内容的前一行和后一行 添加内容