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. WebService学习总结(二)--使用JDK开发WebService

    一.WebService的开发方法 使用java的WebService时可以使用一下两种开发手段 使用jdk开发(1.6及以上版本) 使用CXF框架开发(工作中) 二.使用JDK开发WebServic ...

  2. Linux环境搭建及项目部署

    一. VMWare安装图解 1.点击下一步 2.接受条款,下一步 3.选择安装目录,不建议有中文目录和空格目录.下一步 4.下一步 5.这两个选项根据可以爱好习惯选择,下一步 6.安装 7.完成 9. ...

  3. Django——Paginator分页功能练习

    1.路由urls.py from django.contrib import admin from django.urls import path from app01.views import in ...

  4. Linux查看英伟达GPU信息

    命令: nvidia-smi 结果:

  5. 20210823 数数,数树,鼠树,ckw的树

    考场 乍一看都不好做 仔细想想发现 T1 的绝对值特别好,轮流选剩余的最大/最小值就行了 T2 又要计数,直接想部分分,发现一个 sb 容斥就有 35ps(但数据锅了,只有 25pts) T3 什么玩 ...

  6. javascript(2)运算符

    ### js运算符 1.运算符 1.typeof 获取当前变量类型 运算符(特殊) 2.= 赋值运算符 3.== 简要比较运算符(忽略变量的类型) 4.=== 标准比较运算符(严格变量的类型.判断是否 ...

  7. 这篇 Java 基础,我吹不动了

    Hey guys,这里是程序员cxuan,欢迎你收看我最新一期的文章,这篇文章我补充了一些关于<Java基础核心总结>的内容,修改了部分错别字和语句不通顺的地方,并且对内部类.泛型等内容进 ...

  8. SQL-Instead of 触发器

    定义及优点 INSTEAD OF触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作.        在表或视图上,每个 INSERT.UPDATE 或 DELETE 语句最多可 ...

  9. PyCharm--帮助文档

    PyCharm官方文档翻译 PyCharm快捷键

  10. 用Python实现童年的21款小游戏,有你玩过的吗?(不要错过哦)

    Python为什么能这么火热,Python相对于其他语言来说比较简单,即使是零基础的普通人也能很快的掌握,在其他方面比如,处于灰色界的爬虫,要VIP的视频,小说,歌,没有爬虫解决不了的:数据挖掘及分析 ...