Caterpillar的启动以及自动化启动脚本

Caterpillar是基于以太坊的BPMS,建模的BPMN图形可被Caterpillar转化为solidity程序部署到以太坊中。

Caterpillar分为Caterpillar Core和 execute panel,启动时需要其他进程的支持。如果每次手动启动则很麻烦,因此,使用python脚本进行快速启动。

制作自动化脚本的目的是快速启动Caterpillar,以及后续对Caterpillar代码生成的中间过程进行处理。

首先必须启动Caterpillar core,在运行它之前,必须安装 gulp-cli,

进入Caterpillar core的目录后,执行以下指令:

npm install
gulp build # 完成后运行
gulp

注意

运行Core之前必须打开 mongodb以及Ganache cli,

mongodb的打开方式为:

# sudo mongod

Ganache cli是以太坊测试节点。启动ganache cli

#ganache-cli

启动执行面板

初始的时候npm install

然后执行 ng serve

通过本地端口4200打开。

编写脚本使各组件自动后台运行。

每次分别启动组件非常麻烦,不如将它们放入后台运行。

后台运行ganache-cli的方法是

nohup ganache-cli &>log &,这样ganache-cli运行时候的日志就会输出到log文件中。

执行该指令后会返回ganache-cli的进程id。

如果想结束,则通过进程号关闭进程。

python中如何使用nohup指令?

直接对python脚本执行nohup 指令是可以的。

例如nohup ./init_run.py &>log & 执行后,生成的log仍然是ganache-cli的log ,

查看其返回的进程号859可以看到:

ics        859   632  0 22:39 tty3     00:00:00 /usr/bin/python3 ./init_run.py
ics 860 859 7 22:39 tty3 00:00:04 node /usr/local/bin/ganache-cli
ics 891 632 0 22:40 tty3 00:00:00 grep --color=auto 859

859进程是python脚本,而860是859的子进程。该子进程运行着ganache-cli。

这样做固然达到了ganache-cli后台挂起的效果,但是可不可以直接执行py脚本就能做到呢?

即用subprocess达到后台调用的效果。

如果用os.system直接执行的话固然可以,但是它无法返回进程uid.

如果要返回进程uid必须采用subprocess方法。

import subprocess
proc = subprocess.Popen(' ganache-cli ', shell=true)
print(proc.pid) #可得到id号

这里要注意,如果是单纯的ganache-cli,返回的id就是其进程号

但如果是下面这样,返回的进程号便是nohup的,而nohup在完成后会自动消失,所以这里的ganache-cli进程号是pid+1.

import subprocess
proc = subprocess.Popen('nohup ganache-cli &>log & ', shell=true)
print(proc.pid) #可得到id号

注意,subprocess.Popen中的 &>log简写会失效。 写成原来的, >log 2>&1

https://www.pynote.net/archives/2088

python杀掉所有进程的脚本

由于都是后台运行,所以每次杀后台脚本非常麻烦,这里写一个杀掉全部后台的脚本。原理仍然是通过grep 筛选出所有相关进程号。

#!/usr/bin/python3

import subprocess
def mycmd(str):
subprocess.Popen(str,shell=True) def deleteproc(processName):
return 'ps -ef | grep '+processName+' | grep -v grep | cut -c 9-15 | xargs kill -s 9' if __name__ == "__main__":
subprocess.Popen(deleteproc('ganache-cli'), shell=True)
subprocess.Popen(deleteproc('mongod'),shell=True)

kill -s 9 进程号

该指令可以强制杀掉进程。-s 9 将信号9传递给进程,该信号意为立即终止进程。

根据程序名杀进程

pkill 进程名

killall 进程名

但是根据进程名杀进程有时候并不管用。

根据进程号杀进程是最有效的。只要我们找到该进程名的所有进程id,然后批量杀掉这些id,就可以杀掉进程。

ps -ef | grep ganache-cli | grep -v grep | cut -c 9-15 | xargs kill -s 9

该指令便可以删除全部的ganache-cli进程。

grep -v grep 过滤了grep进程, cut -c 9-15是截取输入行的第9个字符到第15个字符。是进程ID

xargs命令将前面得到的结果作为参数。

简化版本:使用后没有效果,看来最保险的还是上面的指令。

pgrep ganache-cli | xargs kill -s 9 # pgrep直接返回id号

kill -s 9 'pgrep ganache-cli'

杀进程非常全的教程。 https://www.cnblogs.com/apolloren/p/9979328.html

https://www.cnblogs.com/huminxxl/p/4151367.html

https://www.cnblogs.com/jins-note/p/9636969.html

python执行shell命令的常用方法

1.调用os.system方法

import os
cmd = os.system('ls -al')
#print(cmd) #返回状态码,失败是1

os.system方法会直接调用系统命令。

2. os.popen()方法

os.popen(command[,mode[,bufsize]])
# command是指令
# mode是模式权限
# bufsize指明了文件需要的缓冲大小。
# 例如,使用mkdir命令 #!/usr/bin/python
#-*- coding: utf-8 -*-
import os
a = 'mkdir newdir'
b = os.popen(a, 'r',1) #
print(b) # 返回系统的值

3.subprocess

p = subprocess.run(['mkdir','anotherdir'])

subprocess是目前常用的方式。

https://www.cnblogs.com/wqbin/p/11759396.html

linux查询命令所在路径

例如,我想知道python3所在的路径,使用whereis指令

whereis python3

linux 使程序在后台运行的方法

# 后台执行程序
nohup python xxx.py >> run.log 2>&1 &

nohup是挂起的意思, 将进程放置于后台运行,并且把输出定向到run.log中

2 > &1的意思是?

1是标准输出

2是stderr

0是stdin 即标准输入.

>是覆盖式重定向,而>>是追加式重定向。

>&是一个整体,不可分开。所以, 2>&1 的意思就是 把标准错误向标准输出中定向。

最后一个&的意思是将该条命令放到后台执行。

1.本来1指向屏幕。 这里的1就是程序将会输出的标准输出,终端屏幕。
2. 执行 > log后, 1指向了log
3. 2>&1 , 2--->1 2指向了1,因此2也指向了log

如果 2>&1放到中间会如何?

放到中间的话, 2指向了1之前指向的屏幕,但是1后来指向了log.

因此,会造成两者不一致。

如何简写呢?

&>log或者>&log 这样便可以代替 >log 2>&1.

参考资料

https://blog.csdn.net/zhaominpro/article/details/82630528

https://www.cnblogs.com/zhenghongxin/p/7029173.html

https://www.cnblogs.com/andylhc/p/9721705.html

Caterpillar的启动以及自动化启动脚本的更多相关文章

  1. 使用dbstart 和dbshut 脚本来自动化启动和关闭数据库

    使用dbstart 和dbshut 脚本来自动化启动和关闭数据库:1. 登录用户root.2. 编辑你的平台的oratab 文件.打开文件/etc/oratab:文件里数据库条目为以下格式:SID:O ...

  2. 一键启动NameNode和DataNode--shell脚本

    使用shell脚本,一键启动hadoop中的NameNode和DataNode.分为普通版和装逼版.装逼版较普通版多了很多判断和信息提示,当然主要还是为了我联系shell脚本而写的. 如果想实现复用, ...

  3. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  4. 启动多个logstash脚本

    一台服务器上启动多个logstash脚本 # more logstash_click #!/bin/sh # Init script for logstash # Maintained by Elas ...

  5. SQLServer启动和关闭bat脚本

    原文:SQLServer启动和关闭bat脚本   安装完毕SQL SERVER 2005后,会默认自动启动SQL Server等几个服务,这几个服务比较占用系统资源.当不运行SQL Server时,最 ...

  6. Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本

    1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动. 2.test.sh部分源码 #!/bin/sh #查看桌面是否启动 while tru ...

  7. .net 程序通过 crontab 无法启动,手动执行脚本可以启动

    一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...

  8. Genymotion自动化启动

      一.启动方式 命令行: player.exe --vm-name [模拟器名称]   例子: "D:\Program files\Genymobile\Genymotion\player ...

  9. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

随机推荐

  1. 数据库CPU 100%处理记录

    问题描述 2020年7月13日一大早收到告警,测试环境数据库CPU告警. 登录aws查看监控如下图   问题分析 出现这种cpu 100%的问题,都是因为sql性能问题导致的, 主要表现于 cpu 消 ...

  2. Java基础(三)——内部类

    一.内部类 内部类(Inner Class)就是定义在一个类里面的类.与之对应,包含内部类的类被称为外部类.内部类可以用private修饰. 1.为什么要定义内部类?或者内部类的作用是什么? 内部类提 ...

  3. kubeadm方式搭建K8S集群

    一.kubeadm介绍 二.安装要求 三.集群规划 四.环境初始化(在每个服务器节点操作) 1.关闭防火墙 2.关闭selinux 3.关闭swap 4.根据规划设置主机名 5.在Master添加ho ...

  4. 浅析mybatis中${}和#{}取值区别

    mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单:一个成熟的框架,必然有精巧的设计,值得学习. 在使用mybatis框架时,在sql语句中获取传入的参数有如下两种方式: ${p ...

  5. linux 档案权限篇之一

    一:预备知识 1.在linux中,任何一个档案都具有.所有者.用户组.其他用户这三种身份的个别权限. 1.所有者:即档案拥有者,由于Linux是多人多任务的系统,因此可能常常会有很多人同时使用这部主机 ...

  6. 论文解读《Momentum Contrast for Unsupervised Visual Representation Learning》俗称 MoCo

    论文题目:<Momentum Contrast for Unsupervised Visual Representation Learning> 论文作者: Kaiming He.Haoq ...

  7. symfony2已有数据表导入实体时报错 Doctrine does not support reverse engineering from tables that don't have a primary key

    先在配置文件 app/config/config.yml中配置 schema_filter: /^(?!(tablename))/ 即可,或者在出现问题表都加上一个id 然后再使用命令 php app ...

  8. ssh 执行 shell脚本执行jps时:-bash: jps: command not found

    转至: https://www.codeleading.com/article/67592908468/ 我构建了hadoop集群.我们一定会写一个shell脚本去每一个节点上去jps,查看每个节点的 ...

  9. struts2 使用ajax进行图片上传

    第一步:引入一个插件    jquery.form.js /*! * jQuery Form Plugin * version: 3.36.0-2013.06.16 * @requires jQuer ...

  10. Node.js躬行记(11)——E2E测试

    Cypress是为现代网络构建的前端测试工具,解决了开发人员和 QA 工程师在测试应用程序时面临的关键痛点. 在这个测试框架中包含了E2E测试.集成测试和单元测试(内嵌了Mocha),我们需要的是它的 ...