流程一直处于Running状态,应该怎么停止?
流程一直处于Running状态,应该怎么停止?
概述
我们有遇到这种情况:可能由于某些原因,流程发起后一直处于Running状态,然后我们想Stop掉这些出问题的流程,这个时候你在Workspace里面进行操作,这个操作是不可能完成的,Workspace也会一直处于Loading状态。
这种情况下,您唯一的选择就是通过更新K2 Database来停止这些流程。
在执行这些操作之前,应该尝试通过
Workspace停止流程实例,只有在Workspace处理不了的时候,才去更新K2 Database
在执行操作之前,请熟悉每个状态的含义,这些状态可以在[ServerLog].[Status]表找到,它的结构如下:
0 - Error
1 - Running
2 - Active
3 - Completed
4 - Stopped
5 - Deleted
Running状态的流程实例通常意味着K2服务器仍然在尝试处理有关WF已构建的操作,此状态不需要用户输入,K2正在尝试处理待办生成前的数据。
通过更新 K2 数据库来停止进程的步骤
在执行以下步骤之前, 请确保 K2 数据库已经备份,安全第一!
通常有两种情况下, 您将停止进程实例:
- 只是需要停止某些实例, 但它不会让用户通过
Workspace(将状态设置为停止4 - Stopped) - 通过调查, 您发现运行的实例会导致 K2 产品的不良行为。(将状态设置为暂停
11 - Paused)
方案1
- 标识需要停止的运行实例
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
- 确定是否需要停止所有这些进程实例, 或仅对其中的某个子集进行停止。
/**为某一流程运行实例。可以从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
- 运行查询, 将所需的流程实例更新为停止状态, 例如:
/**更新正在运行状态中的所有流程实例为停止状态 4 - Stopped**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 4, ServerID = 0
WHERE Status = 1
- 现在应该能在过
Workspace看到这些流程实例已经停止,也可以单独启动一个测试或删除它们。
如果您试图更新数据库中的状态而不将Server ID设为0,则状态将自动更新为1(运行)。ServID=1指示K2服务仍在这个进程上运行。设置ServID=0将告诉K2服务不再使用此服务。
方案2
- 首先计算出如果没有完成的话,有多少个运行实例:
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
- 确定是否需要停止所有这些过程实例,或者仅仅是其中的一个子集。
/**为某一流程运行实例。可以从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
- 一旦您建立了 ProcInst 表中的哪些条目需要更新, 我们需要构建更新查询脚本:
/**更新正在运行状态中的所有流程实例为停止状态 11 - Paused**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 11, ServerID = 0
WHERE Status = 1
- 现在启动
SQL Management Studio, 在SQL Management Studio上运行上面构建的更新查询脚本。 - 运行更新查询并确认状态列(
Status)更新为 11。
在方案2中,我们将状态列更新为
11,而不是停止4。提供11的ID提供多种好处:
- 因为它是K2不期望的状态(
11),K2服务会把它忽略掉,不会当做流程实例,甚至不会注意到它存在;因此,没有任何操作(action takes)发生在它上面;11不是特别需要的,你可以提供任何不被用作状态的数字,它也会做同样的事情(例如,你可以把它更新为666,如果你觉得有意义的话;我把它保持为11,因为这意味着它以前是1 - Running。- 将进程置于
Paused状态后,将不会使用K2资源;如果您需要再次启动流程实例,可以将其更新为1,并且它将很快从上次更新到11的中断位置被拾起;请记住,已完成(completed)的实例无法再次启动。- 如果您有一个可疑的进程,将状态设置为11将在将来帮助您,因为您可以获得在K2服务处于更好状态之后需要检查的ProcInst ID列表。然后你就可以弄明白他们为什么会跑;请记住,因为它们是状态11,客户将无法通过
K2 Management/K2 Workspace(Legacy)看到它们,此过程仅在您检查支持时才保留选项。
流程一直处于Running状态,应该怎么停止?的更多相关文章
- kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决
最近刚刚入手研究kubernetes,运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: kubectl ...
- 生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
2018-01-02 实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决? 今天我翻腾出自己的kindle,好久没用了,屏幕一直是一个电池状态,充电头+线充了2个钟头,按电源键木有反应,也是 ...
- 使用kubernetes创建容器一直处于ContainerCreating状态的原因查找与解决
运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: [root@master- ~]# kubectl ...
- bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比
1.某游戏的客户端每隔5分钟会向服务端报告一次玩家的账户积分,如果两次报告的时间间隔不大于5分钟,认为该玩家在这5分钟内在线,假设报告数据的格式如下: IP Dat ...
- 为什么JAVA线程中没有Running状态?
面试官问:为什么 Java 线程没有 Running 状态?我懵了 —— 转 芋道源码 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如 ...
- 【原创】大叔经验分享(70)marathon重启app后一直处于waiting状态
marathon重启app后一直处于waiting状态,查看marathon日志 # journalctl -u marathon -f 有如下日志: Jun 14 12:58:38 DataOne- ...
- 为什么 Java 线程没有 Running 状态?
Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...
- k8s删除namespace一直处于terminating状态
k8s删除namespace一直处于terminating状态 当遇到删除ns是一直处于terminating情况可以用调k8s api进行删除. 1.创建api proxy. [root@node1 ...
- kubernetes删除pod,pod一直处于Terminating状态
删除pod,pod一直处于Terminating状态 [root@yxz-cluster01 deploy_yaml]# kubectl get pod -n yunanbao NAME READY ...
随机推荐
- 计算mysql中某个字段某字符出现的次数,case when 和 截取字符的用法
select LENGTH(type) - LENGTH(replace(type,'_','')) as counts from sa_log_olap where type like 'XX_XX ...
- react组件(react-grid-gallery)
react有很多好玩的组件,react-grid-gallery就是其中一个,主要处理图片展示,对图片进行放大与缩小 文档:https://www.npmjs.com/package/react-gr ...
- C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变
class Program { static void Main(string[] args) {//G:\zhyue\backup\projects\Test\ConsoleApplication1 ...
- Android设置日期DatePickerDialog
设置日期DatePickerDialog package com.example.testview; import java.util.Calendar; import java.util.Date; ...
- 带你从零学ReactNative开发跨平台App开发(四)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- Week5——Ajax
1.简介 AJAX 相当于异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网 ...
- EF的连表查询Lambda表达式和linq语句
select c; ), b=> b.Id, p=> p.BlogId, (b, p) => new {b}); public class Blog { public int Id ...
- spider-抓取网页内容(Beautiful soup)
http://jingyan.baidu.com/article/afd8f4de6197c834e386e96b.html http://cuiqingcai.com/1319.html Windo ...
- jquery ajax跨域解决
双十一开发了一个抽奖API,最近上线了,各个事业部的大神们需要前台页面,异步调用我的抽奖API,要我提供js. js 提供之后发现不对,跨域了.之前也碰到过跨域的问题,研究过这个问题,三种方法解决. ...
- 【原创】rabbitmq 学习
rabbitmq 命令 1. 用户管理类命令: 该类别比较意图比较明显,详细查看官方文档.现做俩点说明: authenticate_user 此命令用于验证一个用户名和密码对不对,并没有什么用: se ...