流程一直處於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狀態,應該怎麽停止?