首页 文章 精选 留言 我的

精选列表

搜索[管理工具],共4316篇文章
优秀的个人博客,低调大师

nginxWebUI 1.3.9 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡,日志管理和解析, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个sqlite.db到系统用户文件夹中, 注意进行备份. 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 同时提供jar与docker部署方式 本次更新内容 1. 更换证书申请模式为dns方式申请,申请期间不再占用nginx80端口,做到高可用,而且可以申请泛域名(*.domain.com)证书 2. 修改一些文字描述, 让使用更清晰明了 3. 修复大量bug与issue

优秀的个人博客,低调大师

nginxWebUI 1.2.9 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡,日志管理和解析, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个sqlite.db到系统用户文件夹中, 注意进行备份. 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 同时提供jar与docker部署方式 本次更新内容 1.提供日志生成与解析功能,可方便的统计nginx上的访问频率与其他信息 2.修复一些bug

优秀的个人博客,低调大师

nginxWebUI 1.2.1 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个.sqlite.db到系统用户文件夹中, 注意进行备份 . 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 本次更新内容 1. 提供docker镜像, 在一个docker镜像中同时安装了nginx和nginxWebUI, 一体化运行与管理更方便, WebUI兼容性更好, 更适合企业批量部署 下载镜像:docker pull registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.2.1 启动容器:docker run -itd --net=host registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.2.1 2. 远程管理中增加了可批量运行命令,可查看nginx运行与否 3. 增强了账号安全管理, 本项目涉及系统权限比较深, 必须加强安全管理

优秀的个人博客,低调大师

pip 20.1 发布,Python 包安装和管理工具

pip 20.1 已发布,可通过下面的命令进行升级: python -m pip install --upgrade pip 主要更新内容: 在构建本地目录时,通过更改行为以执行就地构建(in-place builds),而不是复制到临时目录,显著提升了构建本地目录的速度 通过对网络访问并行化,执行 pip list --outdated 命令速度显著提升,这也是 pip 代码库中并行代码的首个实例 新的pip cache 命令,可自检和管理 pip 的缓存目录 对于直接使用 url 安装的软件包,pip freeze 命令进行了优化 详情查看https://pip.pypa.io/en/latest/news/

优秀的个人博客,低调大师

LCPkg 0.2.1 发布,C/C++ 依赖管理工具

LCPkg 0.2.1 发布了,LCPkg 是一个用于管理 Windows C/C++ 项目依赖的命令行工具,它能够: 从 vcpkg 或 GitHub 安装依赖包 记录你项目的相关信息以及依赖库信息 将资源文件、头文件、库文件打包,方便其他人安装 这是第一个公开发行版,没有更新日志,以下介绍 lcpkg 的简单用法。 快速上手 先安装依赖: NodeJS Vcpkg 然后安装 lcpkg: npm install -g lcpkg 设置 vcpkg 的根目录路径: lcpkg config vcpkg.root /path/to/vcpkg 进入你的项目目录: cd /path/to/your/project 告诉 lcpkg 你的项目信息并创建 lcpkg.json 配置文件: lcpkg init 使用下面这样的命令安装你需要的依赖包: lcpkg install sdl2 curl 如果你的项目是一个 C/C++ 库并想发布给其他开发者使用,你可以打包它: lcpkg pack 这个命令会打包头文件、库文件等开发所需的文件,然后输出像下面这样的包文件: dist/yourlib_all.lcpkg.zip dist/yourlib_x86-windows.lcpkg.zip dist/yourlib_x64-windows.lcpkg.zip dist/yourlib_x86-uwp.lcpkg.zip dist/yourlib_x64-uwp.lcpkg.zip yourlib_all.lcpkg.zip文件是你项目支持的所有平台和架构版本包的集合, 你可以这样安装它: lcpkg install /path/to/yourlib_all.lcpkg.zip 如果你的项目是一个开源项目并且托管在GitHub.com上,你可以在每次发布发行版时将这些文件上传到发行版附件中,然后告诉你的用户这样安装你的包: lcpkg install github.com/yourusername/yourlib yourlib_all.lcpkg.zip文件的体积通常很大,我们建议你上传除它以外的文件,这样你的用户就不会花费太多时间在下载上。 常见问题 为什么不支持从码云(Gitee)下载依赖包?你不爱国了吗? 从码云(Gitee)下载附件需要验证用户名和密码,没法直接下载,这个问题虽然能解决但暂未列入开发计划。只能怪那些喜欢在码云上乱搞的碍国者,要是没有他们的话就不用处理这种问题了。 依赖包都是从哪下载的?可信吗? 这个不用担心,LCPkg 是调用 vcpkg 安装依赖包的,所有依赖包的下载地址和构建方式都是公开透明的。

优秀的个人博客,低调大师

phpMyAdmin 4.9.1 发布,基于 Web 的 MySQL 管理工具

phpMyAdmin 4.9.1发布,此版更新如下: 对 MySQL8.0.13及更高版本使用CURRENT_TIMESTAMP编辑列 解决 PHP 8 的兼容性问题 GIS 可视化的导出 其中部分排序规则类型的增强 修复文本字段导入和导出过程中的引号问题 改进向 Designer 中添加新表 修复了通过身份验证的用户可能在数据库服务器和 web 服务器之间触发大量通信量的问题 修复:攻击者在管理员使用安装脚本的同时,可以从安装脚本中删除服务器 详情见发布说明: https://www.phpmyadmin.net/news/

优秀的个人博客,低调大师

Percona Toolkit 3.1.0 发布,MySQL 管理工具包

Percona Toolkit 3.1.0 发布了,Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务。 新特性与改进 PT-1696:新的 pt-pg-summary 工具,以类似于其他 PT 摘要工具的方式支持 PostgreSQL 数据收集。 PT-1663:有两个新选项可以限制 pt-stalk 消耗的磁盘空间量:-retention-size 选项使 pt-stalk 存储小于指定的兆字节数,而 --retention-count 选项限制保存数据的运行次数。 PT-1741:已迁移到新的 MongoDB 驱动 PT-1761:如果表有外键,pt-online-schema-change 将无法在 MySQL 8.0.14 .. 8.0.17 下运行重要的提示:从版本 8.0.14 到当前的 8.0.17,MySQL 在尝试重命名表时在某些条件下出错。由于 pt-online-schema-change 的最后一步是重命名表以交换旧的和新的,我们添加了一个检查,以防止在满足此错误的条件时运行 pt-online-schema-change。 新版本还包含不少 bug 修复,详情见更新说明。

优秀的个人博客,低调大师

API管理工具Swagger介绍及Springfox原理分析

swagger是一个API框架,号称世界上最流行的API工具。它提供了API管理的全套解决方案,比如API在线编辑器,API UI展示界面,代码生成器等诸多功能。 如果想引入swagger进行API管理。目前 springfox 是一个很好的选择,它内部会自动解析Spring容器中Controller暴露出的接口,并且也提供了一个界面用于展示或调用这些API。下图就是简单的一个使用springfox的API展示界面。 springfox的前身是swagger-springmvc,用于springmvc与swagger的整合。 如若在springboot项目中使用springfox,需要3个步骤: maven添加springfox依赖 启动类加上@EnableSwagger2注解 构造Docket bean用于展示API 配置完之后进入 http

优秀的个人博客,低调大师

snakemake--我最喜欢的流程管理工具

框架工具选择 A review of bioinformatics pipeline framework 的作者对已有的工具进行很好的分类 工具推荐 作者的看法: implicit,也就是Make rule语法更适合用于整合不同执行工具 基于配置的流程更加稳定,也比较适合用于集群分配任务。 最后作者建议是: 如果实验室既不是纯粹的生物学试验(不需要workbench这种UI界面),也不需要高性能基于类的流程设计, 不太好选, 主要原则是投入和产出比 如果实验室进行的是重复性的研究,那么就需要对数据和软件进行版本控制, 建议是 configuration-based pipelines 如果实验室做的是探索性的概念证明类工作(exploratory proofs-of-concept),那么需要的是 DSL-based pipeline。 如果实验室用不到高性能计算机(HPC),只能用云服务器,就是server-based frameworks. 目前已有的流程可以在awesome-pipeline 进行查找。 就目前来看,pipeline frameworks & library 这部分的框架中 nextflow 是点赞数最多的生物学相关框架。只可惜nextflow在运行时需要创建fifo,而在NTFS文件系统上无法创建,所以我选择 snakemake , 一个基于Python写的DSL流程框架。 环境准备 为了能够顺利完成这部分的教程,请准备一个Linux环境,如果使用Windows,则按照biostarhandbook(一)分析环境和数据可重复 部署一个虚拟机,并安装miniconda3。 如下步骤会下载所需数据,并安装所需要的软件,并且启动工作环境。 wget https://bitbucket.org/snakemake/snakemake-tutorial/get/v3.11.0.tar.bz2 tar -xf v3.11.0.tar.bz2 --strip 1 cd snakemake-snakemake-tutorial-623791d7ec6d conda env create --name snakemake-tutorial --file environment.yaml source activate snakemake-tutorial # 退出当前环境 source deactivate 当前环境下的所有文件 ├── data │ ├── genome.fa │ ├── genome.fa.amb │ ├── genome.fa.ann │ ├── genome.fa.bwt │ ├── genome.fa.fai │ ├── genome.fa.pac │ ├── genome.fa.sa │ └── samples │ ├── A.fastq │ ├── B.fastq │ └── C.fastq ├── environment.yaml └── README.md 基础:一个案例流程 如果你编译过软件,那你应该见过和用过make, 但是你估计也没有仔细想过make是干嘛用的。Make是最常用的软件构建工具,诞生于1977年,主要用于C语言的项目,是为了处理编译时存在各种依赖关系,尤其是部分文件更新后,Make能够重新生成需要更新的文件以及其对应的文件。 Snakemake和Make功能一致,只不过用Python实现,增加了许多Python的特性,并且和Python一样非常容易阅读。下面将使用Snakemake写一个变异检测流程。 第一步:序列比对 Snakemake非常简单,就是写各种rule来完成不同的任务。我们第一条rule就是将序列比对到参考基因组上。如果在命令行下就是bwa mem data/genome.fa data/samples/A.fastq | samtools view -Sb - > mapped_reads/A.bam。 但是按照Snakemake的规则就是下面的写法。 # 用你擅长的文本编辑器 vim Snakefile # 编辑如下内容 rule bwa_map: input: "data/genome.fa", "data/samples/A.fastq" output: "mapped_reads/A.bam" shell: """ bwa mem {input} | samtools view -Sb - > {output} """ 解释一下:这几行定义了一个规则(rule),在这个规则下,输入(input)有两个,而输出(output)只有一个,在shell中运行命令,只不过里面的文件都用{}形式替代。伪执行一下:snakemake -np mapped_reads/A.bam检查一下是否会出错,真实运行情况如下(不带规则,默认执行第一个规则): run snakemake 第二步:推广序列比对规则 如果仅仅是上面这样子处理一个文件,还无法体现snakemake的用途,毕竟还不如手动敲代码来的方便。snakemake的一个有点在于它能够使用文件名通配的方式对一类文件进行处理。将上面的A改成{sample},就可以将符合*.fastq的文件处理成*.bam. rule bwa_map: input: "data/genome.fa", "data/samples/{sample}.fastq" output: "mapped_reads/{sample}.bam" shell: """ bwa mem {input} | samtools view -Sb - > {output} """ 那么,用snakemake -np mapped_reads/{A,B,C}.bam,就会发现,他非常机智的就比对了B.fastq和C.fastq,而不会再比对一遍A.fastq, 也不需要你写一堆的判断语句去手动处理。 规则统配 当然,如果你用touch data/samples/A.fastq改变A.fastq的时间戳,他就会认位A.fastq文件发生了改变,那么重复之前的命令就会比对A.fastq。 第三步:比对后排序 比对后的文件还需要进一步的排序,才能用于后续分析,那么规则该如何写呢? rule samtools_sort: input: "mapped_reads/{sample}.bam" output: "sorted_reads/{sample}.bam" shell: "samtools sort -T sorted_reads/{wildcards.sample}" " -O bam {input} > {output}" 以之前的输出作为输出文件名,输出到另一个文件夹中。和之前的规则基本相同,只不过这里用到了wildcards.sample来获取通配名用作-T的临时文件的前缀sample实际名字。 运行snakemake -np sorted_reads/B.bam,你就会发现他就会非常智能的先比对再排序。这是因为snakemake会自动解决依赖关系,并且按照依赖的前后顺序进行执行。 第四步: 建立索引和对任务可视化 这里我们再写一个规则,对之前的排序后的BAM文件建立索引。 rule samtools_index: input: "sorted_reads/{sample}.bam" output: "sorted_reads/{sample}.bam.bai" shell: "samtools index {input}" 目前已经写了三个规则,那么这些规则的执行和依赖关系如何呢? snakemake提供了--dag选项用于dot命令进行可视化 snakemake --dag sorted_reads/{A,B}.bam.bai | dot -Tsvg > dag.svg 运行流程 第五步:基因组变异识别 基因组变异识别需要整合之前所有的BAM文件,你可能会打算这样写 rule bcftools_call: input: fa="data/genome.fa", bamA="sorted_reads/A.bam" bamB="sorted_reads/B.bam" baiA="sorted_reads/A.bam.bai" baiB="sorted_reads/B.bam.bai" output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bamA} {input.bamB} | " "bcftools call -mv - > {output}" 这样写的却没有问题,但是以后每多一个样本就需要多写一个输入,太麻烦了。这里就体现出Snakemake和Python所带来的特性了,我们可以用列表推导式的方法搞定。 ["sorted_reads/{}.bam".format(sample) for sample in ["A","B"]] 进一步,可以在规则外定义SAMPLES=["A","B"],则规则内的输入可以写成bam=["sorted_reads/{}.bam".format(sample) for sample in SAMPLES]. 由于列表推导式比较常用,但是写起来有点麻烦,snakemake定义了expand进行简化, 上面可以继续改写成expand("sorted_reads/{sample}.bam", sample=SAMPLES) 那么最后的规则就是 SAMPLES=["A","B"] rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=SAMPLES), bai=expand("sorted_reads/{sample}.bam.bai", sample=SAMPLES) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" 小练习: 请用snakemake生成当前的DAG图。 第六步:编写报告 上面都是在规则里执行shell脚本,snakemake的一个优点就是可以在规则里面写Python脚本,只需要把shell改成run,此外还不需要用到引号。 rule report: input: "calls/all.vcf" output: "report.html" run: from snakemake.utils import report with open(input[0]) as vcf: n_calls = sum(1 for l in vcf if not l.startswith("#")) report(""" An example variant calling workflow =================================== Reads were mapped to the Yeast reference genome and variants were called jointly with SAMtools/BCFtools. This resulted in {n_calls} variants (see Table T1_). """, output[0], T1=input[0]) 这里还用到了snakemake的一个函数,report,可以对markdown语法进行渲染生成网页。 第七步:增加目标规则 之前运行snakemake都是用的snakemake 目标文件名, 除了目标文件名外,snakemake还支持规则名作为目标。通常我们按照习惯定义一个all规则,来生成结果文件。 rule all: input: "report.html 基础部分小结: 总结下学习过程,知识点如下: Snakemake基于规则执行命令,规则一般由input, output,shell三部分组成。 Snakemake可以自动确定不同规则的输入输出的依赖关系,根据时间戳来判断文件是否需要重新生成 Snakemake以{sample}.fa形式进行文件名通配,用{wildcards.sample}获取sample的实际文件名 Snakemake用expand()生成多个文件名,本质是Python的列表推导式 Snakemake可以在规则外直接写Python代码,在规则内的run里也可以写Python代码。 Snakefile的第一个规则通常是rule all,因为默snakemake默认执行第一条规则 进阶:对流程进一步修饰 在基础部分中,我们完成了流程的框架,下一步则是对这个框架进行不断完善,比如说编写配置文件,声明不同rule的消耗资源,记录运行日志等。 第一步: 声明所需进程数 对于一些工具,比如说bwa,多进程或者多线程运行能够大大加速计算。snakemake使用threads来定义当前规则所用的进程数,我们可以对之前的bwa_map增加该指令。 rule bwa_map: input: "data/genome.fa", "data/samples/{sample}.fastq" output: "mapped_reads/{sample}.bam" threads:8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 声明threads后,Snakemake任务调度器就会在程序运行的时候是否并行多个任务。这主要和参数中的--cores相关。比如说 snakemake --cores 10 由于总体上就分配了10个核心,于是一次就只能运行一个需要消耗8个核心的bwa_map。但是当其中一个bwa_map运行完毕,这个时候snakemaek就会同时运行一个消耗8个核心的bwa_map和没有设置核心数的samtools_sort,来保证效率最大化。因此对于需要多线程或多进程运行的程序而言,将所需的进程单独编码,而不是硬编码到shell命令中,能够更有效的使用资源。 第二步:配置文件 之前的SAMPLES写在了snakefile,也就是意味这对于不同的项目,需要对snakefile进行修改,更好的方式是用一个配置文件。配置文件可以用JSON或YAML语法进行写,然后用configfile: "config.yaml"读取成字典,变量名为config。 config.yaml内容为: samples: A: data/samples/A.fastq B: data/samples/B.fastq YAML使用缩进表示层级关系,其中缩进必须用空格,但是空格数目不重要,重要的是所今后左侧对齐。上面的YAML被Pytho读取之后,以字典保存,形式为{'samples': {'A': 'data/samples/A.fastq', 'B': 'data/samples/B.fastq'}} 而snakefile也可以改写成 configfile: "config.yaml" ... rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=config["samples"]), bai=expand("sorted_reads/{sample}.bam.bai", sample=config["smaples]) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" 虽然sample是一个字典,但是展开的时候,只会使用他们的key值部分。 关于YAML格式的教程,见阮一峰的博客:http://www.ruanyifeng.com/blog/2016/07/yaml.html 第三步:输入函数 既然已经把文件路径都存入到配置文件中,那么可以进一步的改写之前的bwa_map里的输入部分。也就是从字典里面提取到存放的路径。最开始我就是打算这样写 rule bwa_map: input: "data/genome.fa", config['samples']["{sample}"] output: "mapped_reads/{sample}.bam" threads:8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 毕竟"{sample}"从理论上应该得到sample的名字。但是snakemake -np显示出现错误 KeyError in line 11 of /home6/zgxu/snakemake-snakemake-tutorial-623791d7ec6d/Snakefile: '{sample}' 这可能是{sample}的形式只能在匹配的时候使用,而在获取值的时候应该用基础第三步的wildcards.sample形式。于是继续改成config["samples"][wildcards.sample]。然而还是出现了错误。 name 'wildcards' is not defined 为了理解错误的原因,并找到解决方法,我们需要理解Snakemake工作流程执行的一些原理,它执行分为三个阶段 在初始化阶段,工作流程会被解析,所有规则都会被实例化 在DAG阶段,也就是生成有向无环图,确定依赖关系的时候,所有的通配名部分都会被真正的文件名代替。 在调度阶段,DAG的任务按照顺序执行 也就是说在初始化阶段,我们是无法获知通配符所指代的具体文件名,必须要等到第二阶段,才会有wildcards变量出现。也就是说之前的出错的原因都是因为第一个阶段没通过。这个时候就需要输入函数推迟文件名的确定,可以用Python的匿名函数,也可以是普通的函数 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" threads: 8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 第四步:规则参数 有些时候,shell命令不仅仅是由input和output中的文件组成,还需要一些静态的参数设置。如果把这些参数放在input里,则会因为找不到文件而出错,所以需要专门的params用来设置这些参数。 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" threads: 8 params: rg="@RG\tID:{sample}\tSM:{sample}" shell: "bwa mem -R '{params.rg}' '-t {threads} {input} | samtools view -Sb - > {output}" 写在rule中的params的参数,可以在shell命令中或者是run里面的代码进行调用。 第五步: 日志文件 当工作流程特别的大,每一步的输出日志都建议保存下来,而不是输出到屏幕,这样子出错的时候才能找到出错的所在。snakemake非常贴心的定义了log,用于记录日志。好处就在于出错的时候,在log里面定义的文件是不会被snakemake删掉,而output里面的文件则是会被删除。继续修改之前的bwa_map. rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" 这里将标准错误重定向到了log中。 第六步:临时文件和受保护的文件 由于高通量测序的数据量通常很大,因此很多无用的中间文件会占据大量的磁盘空间。而特异在执行结束后写一个shell命令清除不但写起来麻烦,而且也不好管理。Snakemake使用temp()来将一些文件标记成临时文件,在执行结束后自动删除。 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: temp("mapped_reads/{sample}.bam") params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" 修改之后的代码,当samtools_sort运行结束后就会把"mapped_reads"下的BAM删掉。同时由于比对和排序都比较耗时,得到的结果要是不小心被误删就会浪费大量计算时间,最后的方法就是用protected()保护起来 rule samtools_sort: input: "mapped_reads/{sample}.bam" output: protected("sorted_reads/{sample}.bam") shell: "samtools sort -T sorted_reads/{wildcards.sample} " "-O bam {input} > {output}" 最后,snakemake就会在文件系统中对该输出文件写保护,也就是最后的权限为-r--r--r--, 在删除的时候会问你rm: remove write-protected regular file ‘A.bam’?. 进阶部分小结 使用threads:定义不同规则所需线程数,有利于snakemake全局分配任务,最优化任务并行 使用configfile:读取配置文件,将配置和流程分离 snakemake在DAG阶段才会知道通配的具体文件名,因此在input和output出现的wildcards就需要推迟到第二步。 在log里定义的日志文件,不会因任务失败而被删除 在params定义的参数,可以在shell和run中直接调用 temp()中的文件运行结束后会被删除,而protected()中的文件会有写保护,避免意外删除。 最后的代码如下 configfile: "config.yaml" rule all: input: "report.html" rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: temp("mapped_reads/{sample}.bam") params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" rule samtools_sort: input: "mapped_reads/{sample}.bam" output: protected("sorted_reads/{sample}.bam") shell: "samtools sort -T sorted_reads/{wildcards.sample} " "-O bam {input} > {output}" rule samtools_index: input: "sorted_reads/{sample}.bam" output: "sorted_reads/{sample}.bam.bai" shell: "samtools index {input}" rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=config["samples"]), bai=expand("sorted_reads/{sample}.bam.bai", sample=config["samples"]) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" rule report: input: "calls/all.vcf" output: "report.html" run: from snakemake.utils import report with open(input[0]) as vcf: n_calls = sum(1 for l in vcf if not l.startswith("#")) report(""" An example variant calling workflow =================================== Reads were mapped to the Yeast reference genome and variants were called jointly with SAMtools/BCFtools. This resulted in {n_calls} variants (see Table T1_). """, output[0], T1=input[0]) 执行snakemake 写完Snakefile之后就需要用snakemake执行。snakemake的选项非常多,这里列出一些比较常用的运行方式。 运行前检查潜在错误: snakemake -n snakemake -np snakemake -nr # --dryrun/-n: 不真正执行 # --printshellcmds/-p: 输出要执行的shell命令 # --reason/-r: 输出每条rule执行的原因 直接运行: snakemake snakemake -s Snakefile -j 4 # -s/--snakefile 指定Snakefile,否则是当前目录下的Snakefile # --cores/--jobs/-j N: 指定并行数,如果不指定N,则使用当前最大可用的核心数 强制重新运行: snakemake -f # --forece/-f: 强制执行选定的目标,或是第一个规则,无论是否已经完成 snakemake -F # --forceall/-F: 也是强制执行,同时该规则所依赖的规则都要重新执行 snakemake -R some_rule # --forecerun/-R TARGET: 重新执行给定的规则或生成文件。当你修改规则的时候,使用该命令 可视化: snakemake --dag | dot -Tsvg > dag.svg snakemake --dag | dit -Tpdf > dag.pdf # --dag: 生成依赖的有向图 snakemake --gui 0.0.0.0:2468 # --gui: 通过网页查看运行状态 集群执行: snakemake --cluster "qsub -V -cwd -q 投递队列" -j 10 # --cluster /-c CMD: 集群运行指令 ## qusb -V -cwd -q, 表示输出当前环境变量(-V),在当前目录下运行(-cwd), 投递到指定的队列(-q), 如果不指定则使用任何可用队列 # --local-cores N: 在每个集群中最多并行N核 # --cluster-config/-u FILE: 集群配置文件

优秀的个人博客,低调大师

docker容器轻量级web管理工具之portainer

portainer部署&监控工具 官方地址:https://github.com/portainer/portainer 部署方法:https://portainer.readthedocs.io/en/latest/deployment.html 方法1、基于本地容器的部署【推荐】 以192.168.2.29这台主机为例。 首先需要开启docker的2375端口 vi /etc/sysconfig/docker添加上 centos6下使用other_args='-Htcp://0.0.0.0:2375 -H unix:///var/run/docker.sock' centos7下使用OPTIONS='-Htcp://0.0.0.0:2375 -H unix:///var/run/docker.sock' 然后重启docker 拉取镜像并启动 docker pull portainer/portainer docker run -d -p 9000:9000portainer/portainer -H tcp://192.168.2.29:2375 然后浏览器访问即可。 可以创建容器、监控容器状态。这个容器没有自带登录的功能,如果要生产环境使用的话,需要给它前面用nginx做个反向代理,加上密码验证。 方法2、连接到远程容器的部署 docker run -d -p 9000:9000portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT> 方法3、连接到swarm集群的部署 docker run -d -p 9000:9000portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT> --swarm 或者 docker service create --name portainer \ --publish 9000:9000 \ --constraint 'node.role == manager' \ --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock\ portainer/portainer \ --swarm 方法4、不依赖于容器的部署 cd /opt wgethttps://github.com/portainer/portainer/releases/download/1.10.2/portainer-1.10.2-linux-amd64.tar.gz tar xf portainer-1.10.2-linux-amd64.tar.gz 执行/opt/portainer/portainer -Htcp://DOCKER_HOST:DOCKER_PORT 或/portainer/portainer -Htcp://DOCKER_HOST:DOCKER_PORT -p 8080这种自定义端口的方式 发现方案4的效果不理想,加载的速度很慢。 整体而言,如果要用的话,建议使用方法1。另外,这个工具界面上不如shipyard好用。 本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1884472,如需转载请自行联系原作者

优秀的个人博客,低调大师

软件包管理之前端管理工具yum

一、前言 RPM安装软件有一个很繁琐的问题,那就是包与包之间的依赖关系,如果想正常安装和使用软件程序,就必须根据要求一步一步的解决软件之间的依赖关系。那么如果程序使用的包很多,将会很消耗使用人的时间和精力。那么有没有办法解决这一问题呢? 在RPM中我们介绍了RPM软件会记录软件之间的安装信息,其中也包括了软件之间的依赖属性。那么如果我们在安装前就分析这个列表,那么在安装时就能根据软件之间的关系将所需的软件一次性安装起来,这样就能解决这一问题,这就是 YUM 的机制。 二、yum的介绍 yum(Yellow dog Updater Modified)是CentOS中属于RPM前段软件包管理器,能从指定的服务器中下载RPM包,并自动分析和处理RPM包之间的依赖关系,最后将依次所依赖的软件包都安装了,而无需繁琐的一个一个安装。 三、yum repository:yum仓库 yum仓库的组成部分 3.1、数据 包含所有的软件包文件 3.2、元数据 指的是数据文件:包括每个包的包名、版本信息、各包所包含的文件列表、包与包之间的依赖关系、包的分组信息 小扩展:元数据是怎么来的呢? 使用createrepo工具,能够简洁的快速的将我们所指定的存放大量RPM包的目录,里面所有的RPM包信息都读出来,分析他的依赖关系并生成元数据。所以createrepo可以理解为它是制作yum元数据的工具。 在光盘里其实也有这个元数据,路径在光盘中的 [root@www mnt]# cd repodata/ 里,然后是以 sqlite文件后缀 备注:centos5 是以 xml 后缀,centos6、7是以sqlite数据库的方式存储的 四、yum的配置文件介绍 yum的配置文件有2个: 主配置文件 + 仓库配置文件 4.1、主配置文件路径 /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever #下载RPM包的缓存目录 keepcache=0 #RPM缓存的程序包安装完成后是否保存,0表示不保存,1表示保存 buglevel=2 #调试级别取值范围0-10,默认值为2 logfile=/var/log/yum.log #yum相关日志存放路径 exactarch=1 #是否要平台完全匹配才能安装 obsoletes=1 #需不需要检查已过期的仓库 gpgcheck=1 #是否检查包的完整性和合法性 plugins=1 #是否允许支持yum的插件功能,0表示不允许,1表示允许,建议允许,一般会用yum-fastestmirror这个插件 installonly_limit=5 #允许保留多少个内核包 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release #指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包 4.2、仓库配置文件路径 /etc/yum.repos.d/*.repo 仓库文件可以有多个,而且一个或几个相关的仓库的配置信息也可保存为一个文件,并且所以的仓库文件名都以 .repo结尾。 [REPOID]#容器名字,必须是唯一的 name=#somenameforthisrepository仓库的名字,仅作一个标识 baseurl=#指定真正仓库所在的路径,可以指多个仓库 #例如:baseurl=file:///media/cdrom #ftp://172.168.1.1/path#备注第二行不能顶格写,否则会出错 mirrorlist=#列出容器可以使用站点,如果不想使用,可以再前面加#注释 enabled={0|1}#指是否启用这个仓库,0表示不启用,1表示启用 gpgcheck={0|1}#是否要检测软件包的合法性,0表示不检测,1表示不检查 gpgkey=#软件包的公钥文件所在路径,例如:gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6 cost= #仓库优先级,比如一个软件包在多个仓库都有,那应该选择哪个安装呢?就是根据这个优先级,默认是100, 数字越小表示越优先使用 备注:默认各仓库的用法: base库:通常为系统发行版所提供的程序包(就是光盘) updates库:存放更新包 extra库:存放额外包 epel库:epel库文件 库本身有优先级的,但是仅是在客户端有,服务器端是没有优先级的 小贴士:yum可支持多个协议,包括 ftp、http、nfs和本地文件共享服务 所以仓库配置文件中的 baseurl 一项可以有多个写法,下面是各写法的格式 1)ftp 格式:ftp://server/path/to/repository 2)http 格式:http://server/path/to/repository 3)nfs 格式:nfs://server/nfs_path 4)本地文件共享服务 格式:file:///path/to/repository 五、yum安装步骤 六、yum命令的使用 6.1、yum查询功能 yum[option][需要查询的信息][参数] -y:默认yum需要是交互模式,-y表示自动提供yes响应 -q:静默模式 search:搜索某个软件名或关键字 list:列出所有yum所管理的软件包和名称 info:同上,也类似rpm-qai provides:查找该命令是由软件安装生成的,类似rpm-df的功能 repolist:列出所有可用的repo 例如: [root@localhost~]#yumprovidesbash [root@localhost~]#yumrepolist 例如: [root@localhostyum.repos.d]#yuminstallzlib-static 6.2、安装、升级、降级、卸载功能 yum[option][需要查询的信息][参数] install:后面接需要安装的软件 reinstall:后面接需要重新安装的软件 update:后面接需要升级到的软件 check-update:检查可用的升级包 downgrade:后面接需要降级到的版本 remove:卸载软件 erase:功能同上,卸载 --disablerepo=repoid临时禁用此处指定的repo --enablerepo=repoid临时启动此处启用的repo --noplugins:禁用所有插件 例如: [root@localhostyum.repos.d]#yuminstallzlib-static 6.3、和软件组相关的功能 yum[组功能][软件组] grouplist:列出所有可使用的组列表 groupinfo:后面接groupname,可用了解该group内含所有组的名称 groupinstall:安装整组的软件 groupremove:删除某个组的软件 例如: [root@localhostyum.repos.d]#yumgrouplist #所有的包组未一一列举,若想安装某组可使用groupinstall直接安装 InstalledGroups:#已经安装的软件组 AdditionalDevelopment Base Consoleinternettools Developmenttools InstalledLanguageGroups:#已经安装的语言组 ArabicSupport[ar] ArmenianSupport[hy] GeorgianSupport[ka] AvailableGroups:#有效软件组包文件 BackupClient BackupServer AvailableLanguageGroups:#有效的语言组包文件 AfrikaansSupport[af] AlbanianSupport[sq] 6.4、清理缓存 yumclean{all|package|headers} all:将所有的数据删除,包括元数据和软件文件 package:将所有已下载的软件文件删除 headers:删除所有下载的元数据文件 例如: [root@localhostyum.repos.d]#yumcleanall#这样将会清除所有的已下载的元数据和软件文件 Loadedplugins:fastestmirror,security Cleaningrepos:baseextrasupdates CleaningupEverything Cleaninguplistoffastestmirrors 6.5、yum历史命令 yumhistory[info|list|packages-list|packages-info|summary|addon-info|redo|undo] history:列出历史事务 redo:重新执行事务 undo:撤销事务 例如: yumhistoryinfo15//查看yumhistoryid为15的操作 yumhistoryundo15//撤销yumhistoryid为15的操作 日志文件:/var/log/yum.log 6.6、yum内置变量 $releaserver:代表系统的版本,对Yum而言指的是redhat-releaser版本,指向发行版的主版本号;只替换为主版本号,如RedHat 6.5 ,则替换为6 $basearch:系统基本架构,如果是i686,i586等基本架构就为i386 $arch:系统架构 比如我现在的系统是CentOS6.5,系统架构是x86_64,则 baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/会自动替换为 baseurl=http://mirrors.163.com/centos/6/os/x86_64 六、如何自建yum仓库 6.1、引言: 虽然系统自带的仓库已经很常用,只要连接到互联网我们就能很容易有获取到互联网的yum仓库。但是如果是在企业内网,企业内部不允许访问互联网,又或者如果企业服务器众多,如果都要从互联网去获取yum仓库,那将很占用带宽。基于这种情况,我们就需要自己在企业内部创建yum仓库。 6.2、自建仓库需要使用的命令介绍 createrepo(create repo):创建仓库,在自建仓库时,使用命令createrepo会自动帮我们生成repodata文件作为软件的仓库,而其目录下有四个必要文件:filelists.xml.gz,other.xml.gz,primary.xml.gz和repomd.xml,其中最重要的是repomd.xml文件。一般出现的找不到repodata目录或文件的错误的原因通常有三个:一是路径问题;二是没有生成repodata目录;三是*.repo配置文件冲突(这个需要特意注意)。 小贴士:createrepo命令默认是没有安装,所以我们需要提前安装,createrepo的安装包为“createrepo-0.9.9-17.el6.noarch.rpm”,可以使用RPM或yum先将此程序包安装。 安装方法: #yum-yinstallcreaterepo或rpm-ivhcreaterepo-0.9.9-17.el6.noarch.rpm(路径一定要写对) 6.3、自建yum仓库有2种方法 1)、基于关盘镜像创建yum仓库 2)、根据服务自建提供yum仓库的服务器(ftp、http、nfs) 6.4、基于关盘镜像创建yum仓库 6.4.1、先将光盘挂载至/mnt目录下 mount/dev/cdrom/mnt 6.4.2、配置yum仓库文件 [root@wwwyum.repos.d]#vim/etc/yum.repos.d/local-media.repo#如果local-media.repo不存在,请直接创建 [Meida-repo] name=ThisisLocalmediarepo baseurl=#指向光盘镜像路径 enabled=1#是否启动该仓库 gpgcheck=0#是否检查包完整性 [root@wwwyum.repos.d]#yumcleanall#清除所有的包缓存和元数据 [root@wwwyum.repos.d]#yumlist#列出所有的仓库和程序包 6.5、根据服务自建提供yum仓库的服务器(这里以http服务为例) 6.5.1、首先安装http服务 yum-yinstallhttpd或rpm-ivhhttpd 6.5.2、关闭Linux防火墙和Selinux #防火墙和Selinux可能会影响用户访问HTTP,所以这里需要将其禁用 [root@wwwyum.repos.d]#serviceiptablesstop#关闭防火墙服务 [root@localhost~]#chkconfigiptablesoff#关闭防火墙自动启动 [root@wwwyum.repos.d]#getenforce#查看Selinux状态Enforcing表示启用Permissive表示不启用 Enforcing [root@wwwyum.repos.d]#setenforce0#关闭Selinux0表示关闭1表示开启 [root@wwwyum.repos.d]#getenforce Permissive [root@localhost~]#vim/etc/selinux/config#关闭Selinux开机启动,编辑confg文件,将其中SELINUX字段改为如下设置 SELINUX=disabled 6.5.3、启动httpd服务和开机自动服务 [root@wwwyum.repos.d]#servicehttpdstart#开启httpd服务 [root@wwwyum.repos.d]#chkconfigon#设置httpd服务开机自动启动 [root@localhost~]#netstat-tunlp|grephttp#查看http服务是否已启用 tcp00:::80:::*LISTEN1532/httpd 6.5.4、编辑httpd的文档目录 #httpd默认的目录文档路径为/var/www/html [root@localhosthtml]#mkdir/var/www/html/rpm-repo#创建仓库路径 [root@localhostrpm-repo]#cp-a/mnt/Packages/xcb*/var/www/html/rpm-repo/#拷贝RPM程序包为测试使用 6.5.5、使用createrepo配置yum仓库 [root@localhostrpm-repo]#createrepo/var/www/html/rpm-repo/ 6.5.6、验证和查看http仓库的文件 6.5.7、配置和验证yum仓库 [root@localhostyum.repos.d]#vim/etc/yum.repos.d/local.repo#编辑yum仓库文件,让仓库路径指向http的yum仓库 [http-repo] name=httpyumrepo baseurl=http://192.168.80.150/rpm-repo enabled=1 gpgcheck=0 [root@localhost~]#yumlist 补充:yum只下载rpm包不安装的方法 Yumdownloader 另外一个下载RPM包的方法就是通过一个专门的包下载工具yumdownloader。 这个工具是yum工具包(包含了用来进行yum包管理的帮助工具套件)的子集。 #yuminstallyum-utils 下载一个RPM包: #yumdownloader<package-name> --destdir=/PATH/TO/DIRECTORY:制定下载目录 --resolve:依赖包也会被下载 实例: [root@bash~]#yumdownloadertree Loadedplugins:fastestmirror,langpacks file:///root/test/repodata/repomd.xml:[Errno14]curl#37-"Couldn'topenfile/root/test/repodata/repomd.xml" Tryingothermirror. Loadingmirrorspeedsfromcachedhostfile tree-1.6.0-10.el7.x86_64.rpm [root@bash~]#lstree* tree-1.6.0-10.el7.x86_64.rpm [root@bash~]#yumdownloadersubversion--destdir=/tmp--resolve 下载的包会被保存在当前目录中。你需要使用root权限,因为yumdownloader会在下载过程中更新包索引文件。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册