문제

이것이 어떻게 가장 잘 이루어 집니까? 서버에서 실행중인 앱이 매일 밤 03:00에 이벤트를 트리거하기를 원합니다.

도움이 되었습니까?

해결책

Windows 작업 스케줄러를 사용하십시오

다른 팁

작업 스케줄러를 사용하는 대신 앱 코드 실행 에서이 작업을 수행하려면 앱이 상당히 긴 (예 : 1 시간 또는 3,600 초)로 잠을 자도록하는 기간을 선택해야합니다. 앱이 반복되고 각 수면 호출이 만료되면 앱은 마감 시간 (03:00)까지 얼마나 많은 시간이 남아 있는지 확인합니다. 나머지 수면 시간이 거친 간격 시간 이하로되면 짧은 간격으로 줄여야합니다 (매번 절반 또는 10 초로 감소). 대상 마감 시간에 도달 할 때까지 루프, 수면 및 간격 시간을 줄입니다.

이로 인해 루프가 너무 자주 깨어나는 것을 방지하지만 (86,400 1- SEC 간격은 과잉입니다), 너무 오래 자면서 앱 루프가 대상 마감 시간을 오버 슈팅하는 것을 방지합니다.

1 초의 간격으로 타이머를 만들 수 있고 타이머가 꺼지면 3:00인지 확인하십시오.

기계에 로그인 한 사람이 없어도 실행되도록 서비스에 구축해야하며 트리거가 발생하도록하는 다양한 방법이 있습니다.

a를 만드는 것을 고려하십시오 System.Timers.Timer 어디에 Interval 간의 차이로 설정됩니다 DateTime.Now 그리고 다음 3:00.

여기에는 두 가지 기본 옵션이 있습니다.

기존 서비스 내 에서이 작업을 수행하려는 경우 시간제 노동자 매일 밤 3시에 자신을 트리거하고 "작업"을 실행합니다.

즉, 이것은 일반적으로 Windows 작업 스케줄러. 응용 프로그램을 24/7로 유지하는 대신 매일 3시에 한 번 실행하도록 예약하십시오.


편집하다:

코드에서 작업 스케줄러와 함께 작업 해야하는 경우 (다른 의견에 언급) 가능합니다. 작업 스케줄러가 제공합니다 API 개별 작업을 설정하기 위해 (Itask) 작업 스케줄러를 통해 (ItaskScheduler).

그러나 XP Embedded에서 작업한다는 점을 감안할 때 일반 시스템 구성 기능을 사용하고 매일 한 번 실행할 작업을 설정하는 것이 좋습니다. 임베디드 시스템에서는 배포하는 동안 충분히 제어 할 수 있어야합니다.

다음은 테이블을보기 위해 60 초마다 타이머를 실행하는 단순화 된 서비스 버전입니다. 타이머 ELAPSE 이벤트를 변경하여 시간을 확인하고 실행할 수 있습니다.

Dim Timer As System.Timers.Timer

Protected Overrides Sub OnStart(ByVal args() As String)
    Timer = New System.Timers.Timer(60000)
    AddHandler Timer.Elapsed, AddressOf timer_Elapsed
    Timer.Start()
End Sub

Protected Overrides Sub OnStop()
    Timer2.Stop()
End Sub

Private Sub timer_Elapsed(ByVal pSender As Object, ByVal pargs As System.Timers.ElapsedEventArgs)
    'Ensure the tick happens in the middle of the minute
    If DateTime.Now.Second < 25 Then
        Timer.Interval = 65000
    ElseIf DateTime.Now.Second > 35 Then
        Timer.Interval = 55000
    ElseIf DateTime.Now.Second >= 25 And DateTime.Now.Second <= 35 Then
        Timer.Interval = 60000
    End If

    'Logic goes here
 End Sub

분명히, 가능하다면 여기 다른 사람들이 언급 한 작업 스케줄러를 사용하십시오. 이 작업을 선호하는 방법입니다. 방금이 코드를 놓았으므로 도움이 될 수있는 경우 게시 할 것이라고 생각했습니다. 또한이 코드는 외부 소스가 언제 테이블을 편집 할 것인지 전혀 몰랐기 때문에 우리에게 효과적이었습니다. MD5SUM에서 지적한 바와 같이 간격을 올바른 수의 밀리 초로 설정하는 것은 훨씬 더 효율적인 방법입니다.

이 답변은 약간 남은 필드 일 수 있지만 우리는 종종 사용합니다. cruisecontrol.net 예정된 작업 중 일부. 그것은 그들 모두에게 완벽하지는 않지만 매일 밤 실행하고 다른 코드/결과가 그것에 의존하는 큰 일이라면 좋은 선택입니다. 언제든지 실행할 수 있도록 일정을 잡을 수 있고, 작동/실패한 경우 이메일을받을 수 있습니다. 다른 스크립트/코드가 작동하지 않으면 시작하고 시작하기 전에 필요한 파일을 정리하십시오.

모든 상황에 대한 완벽한 해결책은 아니지만, 그것을 요구하는 사람들에게는 강력합니다. 우리는 빅 데이터 처리 작업 중 일부를 사용하며, 효과가 있거나 실패한 경우 모든 이메일을 보내고 처음 실패하면 30 분 후에 다시 시도 할 것입니다. 그것은 당신에게 멋진 퍼지 느낌을줍니다 :)

Windows 작업 스케줄러 (Klausbyskov가 제안한대로) 또는 SQL 서버 작업.

편집하다:

또는 Dyanically 지정된 시간을 원한다면 10 분마다 투표하고 원하는 시간에 약간의 작업을 수행하는 Windows 서비스를 만들 수 있습니다.

C#에서 Windows 서버 생성 상당히 사소하고 이것을 할 수 있습니다. 보안과 로깅이 실행 중이거나 실행중인 상태에서 무슨 일이 일어나고 있는지 말하기가 어려울 수 있기 때문에 보안과 로깅이 알아 져야합니다.

사용 System.threading.timer.

예정된 작업을 수행하기 위해 ASP.NET 애플리케이션에서 스레드를 생산하고 있습니다.

그것은 당신이 당신이 이용할 수있는 것에 달려 있습니다.

가장 좋은 방법은 a를 사용하는 것입니다 크론 작업, Linux/Unix/Mac OS X에있는 경우 Windows의 작업 스케줄러 또는 발사 Mac OS X의 최신 버전.

응용 프로그램 내 에서이 작업을 수행하려면 정기적으로 시간을 확인하고 03:00 인 경우 이벤트를 시작하는 루프가 필요하지만 이상적이지 않습니다.

프로그램이 명령 줄을 통해 실행할 수 있습니까? 그렇다면 foo.bat 파일을 만들고 프로그램 명령 줄을 호출하십시오 (매우 간단합니다).

그런 다음 사용하십시오 작업 스케줄러 매일 오전 3시에 .bat 파일을 실행하려면.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top