SharePoint 워크플로 타이머 작업이 "일시 중지 중"에 멈춰 있습니다.

증상

SharePoint 중앙 관리에서 워크플로 타이머 작업은 상태를 "일시 중지 중"으로 표시 합니다. 따라서 다음과 같은 문제가 발생 합니다.

  • 작업 승인이 완료 되지 않습니다.
  • 일시 중지 후에는 워크플로를 실행할 수 없습니다.
  • 임의의 워크플로 처리가 발생 합니다.
  • 워크플로는 오랜 기간 동안 작동 하지 않습니다.

원인

가장 가능성이 높은 원인은 잘못 된 워크플로 인스턴스입니다.

해결 방법

이 문제를 해결 하려면 먼저이 문제가 시스템에 도입 된 워크플로 정의로 인 한 것인지 또는 잘못 워크플로 인스턴스로 인해 발생 했는지 확인 합니다. 이 확인 된 후 워크플로 소유자와 협력 하 여 워크플로를 종료 하거나 삭제할 수 있는지 여부를 결정 합니다.

문제를 신속 하 게 진단 하려면 하나를 제외한 모든 서버에서 Microsoft SharePoint Foundation 워크플로 타이머 서비스를 중지 하는 것이 좋습니다.

2 단계: ULS 로깅 수준을 VerboseEx로 설정

SharePoint 관리 셸에서 다음 명령을 실행 합니다.

 Set-SPLogLevel -TraceSeverity VerboseEx  

참고 사항 이로 인해 팜에 성능 문제가 발생할 수 있습니다. Set-sploglevel을 사용 하 여 동작이 재현 된 후에는 기간을 최소로 제한 하 고 ULS 로깅 수준을 기본값으로 다시 설정 하는 것이 좋습니다.

성능 영향으로 인해 전체 VerboseEx 추적이 차단 되는 경우 모든 범주에 대 한 로깅 수준을 Verbose 로, "레거시 워크플로 인프라" (또는 SharePoint 2010의 "워크플로 인프라") 및 "Timer" 범주에 대 한 로깅 수준을 VerboseEx로 설정 합니다. 이렇게 하려면 SharePoint 관리 셸에서 다음 명령을 실행 합니다.

 Set-SPLogLevel -TraceSeverity Verbose   
 Set-SPLogLevel -TraceSeverity VerboseEx -Identity "Legacy Workflow Infrastructure"  
 Set-SPLogLevel -TraceSeverity VerboseEx -Identity "Timer"  

3 단계: 구성 캐시 지우기

워크플로 타이머 작업이 중지 되 고 Microsoft SharePoint Foundation 워크플로 타이머 서비스가 시작 된 서버에 있는 모든 서버에서 구성 캐시를 지웁니다.

4 단계: 문제가 다시 발생 하 고 ULS 로그를 수집할 때까지 기다립니다.

구성 캐시를 지운 후에는 워크플로 타이머 작업의 상태가 "일시 중지 중"에서 일시 중지 됨으로 변경 되 고 "실행 중"으로 바뀝니다. 문제가 발생할 때까지 기다리거나, 일반적으로 10 분 정도 걸립니다. 또한 해당 서버에서 작업을 실행할 수 있는 경우 다른 서버에서 워크플로 타이머 작업이 시작 되는 것을 볼 수 있습니다.

ULS 로그를 5 분 간격으로 확인 하 여 문제가 재현해 지 고 타이머 작업이 중지 되었는지 살펴봅니다. 타이머 작업 상태가 "일시 중지 중"이 되기 전에 ULS 로그에 문제가 표시 됩니다. ULS 로그에서 "Timer Job job-workflow"에 대 한 새 항목을 만들 수 없으면 타이머 작업이 중지 된 것입니다. 이 문제가 발생 하면 다음 조건을 사용 하 여 ULS 로그를 필터링 하 고 마지막 항목의 시간을 확인 합니다.

 Name  Contains  Timer Job job-workflow

5 단계: ULS 로그 검사

  1. ULS 뷰어에서 ULS 로그를 열고 다음 필터를 적용 합니다.

    Name  Contains  job-workflow  
    EventID  Contains  ahk8y
    
  2. 처리 중인 마지막 워크플로를 찾습니다. 대개이는 문제를 일으킨 워크플로 인스턴스입니다. 예를 들면 다음과 같습니다.

    SharePoint Foundation Legacy Workflow Infrastructure ahk8y Verbose In RunWorkflowElev(), begin processing events for instance: bb7e3f4f-74ac-43f7-a31e-faa7e900843e      8329f59d-0342-20c3-fa1a-56f9161ded9f
    
  3. 모든 필터를 지우고 다음 필터를 적용 합니다.

    상관 관계가 같음 <Correlation_ID>
    메시지에 proc_GetWorkflowAssociations 포함 되어 있습니다.
    [EventID에는 b6p4 또는
    EventID에 다음 포함 tzkv]

    이 예제에서는 상관 관계 ID가 8329f59d-0342-20c3-fa1a-56f9161ded9f입니다.

  4. B6p4tzkv이벤트의 마지막 항목을 찾은 다음 ListId, SiteId, ItemId 및 WebId을 찾습니다. 예를 들면 다음과 같습니다.

    05/25/2017 12:28:43.27 OWSTIMER.EXE (0x9318) 0x6DF0 SharePoint Foundation Database b6p4 VerboseEx SqlCommand: ; EXEC proc_getworkflowassociations '8dd5c889-47a6-4798-93ef-8652609278f4', 'j3952987-5ca6-4eae-8530-13e83acf1bb0', 'e22969ea-f883-4e99-8cbd-4b799a884d2d', 'm82r99b0-ff01-4448-9907-e2cbbbca0586', @contenttypeid, @RequestGuid OUTPUT 8329f59d-0342-20c3-fa1a-56f9161ded9f   
    05/25/2017 12:28:43.27 OWSTIMER.EXE (0x9318) 0x6DF0 SharePoint Foundation Database tzkv Verbose SqlCommand: 'proc_GetWorkflowAssociations' CommandType: StoredProcedure CommandTimeout: 0 Parameter: '@RETURN_VALUE' Type: Int Size: 0 Direction: ReturnValue Value: Parameter: '@SiteId' Type: UniqueIdentifier Size: 0 Direction: Input Value: '8dd5c889-47a6-4798-93ef-8652609278f4' Parameter: '@WebId' Type: UniqueIdentifier Size: 0 Direction: Input Value: 'j3952987-5ca6-4eae-8530-13e83acf1bb0' Parameter: '@Id' Type: UniqueIdentifier Size: 0 Direction: Input Value: 'e22969ea-f883-4e99-8cbd-4b799a884d2d' Parameter: '@ListId' Type: UniqueIdentifier Size: 0 Direction: Input Value: 'm82r99b0-ff01-4448-9907-e2cbbbca0586' Parameter: '@ContentTypeId' Type: VarBinary Size: 512 Direction: Input Value: Parameter: '@RequestGuid' Type: UniqueIdentifier Size: 0 Direction: Input Value: '8329f59d-0342-20c3-fa1a-56f9161ded9f' 8329f59d-0342-20c3-fa1a-56f9161ded9f
    

    이 예제에서 ListId는 m82r99b0-ff01-4448 -9907-e2cbbbca0586, SiteId는 8dd5c889-47a6-4798-93ef-8652609278f4이 고, ItemId는 e22969ea-f883-4e99-8cbd-4b799a884d2d이며, WebId은 j3952987 -5ca6-4eae-8530-13e83acf1bb0입니다.

6 단계: 워크플로 식별

SharePoint 관리 셸에서 다음 명령을 실행 하 여 웹 URL 및 목록 제목을 찾습니다.

 $web= (Get-SPSite -Identity <SiteId> |Get-SPWeb -Identity <WebId>)   
 $list = $web.Lists.GetList("<ListId>", $true)  
 $list.ParentWeb   
 $list.Title

Note siteid, WebIdListId 는 5 단계에서 찾은 siteid, WebId 및 ListId에 대 한 자리 표시자입니다.

목록으로 이동 하 여 ItemId를 사용 하 여 항목을 찾습니다. 목록에 임시 보기를 만들고 ITEMID를 통해 필터를 필터링 할 수도 있습니다. 문제가 있는 워크플로가 해당 항목과 연결 됩니다. 항목의 워크플로 설정으로 이동 합니다. 항목에 여러 워크플로가 실행 중인 경우 문제 워크플로의 상태 열을 클릭 하 여 워크플로 기록 페이지를 봅니다.

7 단계: 워크플로 종료

워크플로 기록을 검사 하 여 잘못 된 문제를 파악 합니다. 그런 다음 워크플로를 종료 하거나 항목을 삭제할 수 있습니다.

경우에 따라 6 단계에서 워크플로 또는 항목을 식별 하지 못할 수 있습니다. 이러한 경우 올바른 목록을 보고 있고 다른 모든 데이터를 조사 하는지 확인 합니다. 휴지통도 확인 합니다.

여전히 항목 또는 워크플로를 찾을 수 없는 경우에는 항목이 삭제 되었지만 워크플로 인스턴스가 계속 실행 되 고 있을 수 있습니다. 이 경우 SharePoint 관리 셸에서 다음 명령을 실행 하 여 워크플로를 취소 합니다.

$web = Get-SPWeb <WebURL>  
#Pass the workflow Instance Id from the ahk8y event  
$WorkflowInstanceID = <WorkflowInstanceID>  
$workflowId =  [GUID]$WorkflowInstanceID  
$workflow = New-Object Microsoft.SharePoint.Workflow.SPWorkflow($web, $workflowId);  
[Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($workflow)

추가 정보

아직 해결되지 않았습니까? SharePoint 커뮤니티로 이동 합니다.