سؤال

كيف يتم ذلك بشكل أفضل؟ أريد تطبيقا يعمل على خادم لتشغيل حدث كل ليلة في الساعة 03:00.

هل كانت مفيدة؟

المحلول

استخدام جدولة مهمة ويندوز

نصائح أخرى

إذا كنت ترغب في القيام بذلك في تشغيل رمز التطبيق (بدلا من استخدام جدولة المهام)، يجب عليك اختيار مدة للسماح للتطبيق الخاص بك بنم طويل إلى حد ما (على سبيل المثال، ساعة واحدة، أو 3600 ثانية). حلقات التطبيق الخاصة بك، وكما تنتهي صلاحية كل مكالمة نوم، فإن التطبيق يتحقق دوريا مقدار الوقت المتبقي حتى وقت التسليم (03:00). بمجرد أن يصل وقت النوم المتبقي إلى أسفل الوقت الفاصل الخشن، يجب تخفيضها إلى فاصل زمني أقصر (النصف في كل مرة، أو خفضت إلى 10 ثانية). استمر في الحلقة، والنوم وتقليل الوقت الفاصل، حتى يتم الوصول إلى وقت الموعد النهائي المستهدف.

هذا يمنع الحلقة من الاستيقاظ في كثير من الأحيان (86400 فاصلة 1 ثانية مبالغ فيها)، ولكنها تمنع أيضا حلقة التطبيق من تجاوز وقت الموعد النهائي المستهدف بالنوم لفترة طويلة جدا.

يمكنك إنشاء مؤقت بمقدار 1 ثانية وعندما ينطفئ المؤقت، تحقق مما إذا كان ذلك 3:00.

ستحتاج إلى إنشاءها في خدمة من أجل ضمان تشغيلها حتى إذا لم يكن هناك أحد قام بتسجيل الدخول إلى الجهاز، ثم هناك الكثير من الطرق المختلفة للتأكد من حدوث الزناد.

النظر في صنع System.Timers.Timer أين ال Interval تم تعيينه إلى الفرق بين DateTime.Now و 3:00 المقبل.

هناك نوعان من الخيارات الأساسية هنا.

إذا كنت تحاول القيام بذلك داخل خدمة موجودة، يمكنك استخدام A الموقت لتشغيل نفسك في الساعة 3:00 كل ليلة، وتشغيل "مهمتك".

ومع ذلك، هذا عادة ما يتم التعامل معه بشكل أفضل جدولة مهمة ويندوز. وبعد بدلا من الحفاظ على التطبيق على قيد الحياة 24/7، يمكنك فقط تشغيله مرة واحدة كل يوم في الساعة 3:00.


يحرر:

إذا كنت بحاجة إلى العمل مع جدولة المهام من التعليمات البرمجية (المذكورة في تعليق آخر)، فمن الممكن أيضا. جدولة المهام يوفر api. لإعداد المهام الفردية (itamk.) عبر جدولة المهام (itamkscheduler.).

ومع ذلك، بالنظر إلى أنك تعمل على XP Embedded، فمن المحتمل أن تكون أفضل من استخدام إمكانيات تكوين النظام العادي، وإعداد مهمة لتشغيل مرة واحدة كل يوم. في نظام مضمن، يجب أن يكون لديك سيطرة كافية أثناء نشرك للقيام بذلك.

فيما يلي نسخة مبسطة من الخدمة التي كتبناها والتي تقوم بتشغيل مؤقت كل 60 ثانية لمشاهدة جدول ... يمكنك تغيير حدث التوقيت الصافي للتحقق من الوقت وتشغيله بعد ذلك:

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.

تعديل:

أو إذا كنت تريد وقتا مخصصا بشكل كبير، فيمكنك إنشاء خدمة Windows استطلاعات الرأي كل 10 دقائق ويقوم ببعض الإجراءات في الوقت المناسب المطلوب.

إنشاء خادم ويندوز في C # هو تافه إلى حد ما ويمكن أن تفعل هذا. فقط تأكد من أنك قد حصلت على الأمن وتسجيلها لأنه قد يكون من الصعب جدا معرفة ما يجري أثناء تشغيله (أو ليس) قيد التشغيل.

يستخدم system.threading.timer..

أنا ألقي نظرة على موضوع في تطبيق ASP.NET للقيام بمهام مجدولة.

ذلك يعتمد على ما لديك المتاح لك.

أفضل رهان الخاص بك هو استخدام كرون وظيفة، إذا كنت على Linux / UNIX / MAC OS X، وجدولة مهمة على Windows، أو إطلاق على الإصدارات الأحدث من Mac OS X.

إذا كنت ترغب في القيام بذلك من داخل تطبيق، فستحتاج إلى حلقة يتحقق من الوقت على أساس منتظم ويبعد عن الحدث إذا كان ذلك هو 03:00، ولكن هذا ليس مثاليا.

هل البرنامج قادر على تشغيله عبر سطر الأوامر؟ إذا كان الأمر كذلك، فقم بإنشاء ملف foo.bat، ثم اتصل بسطر أوامر البرنامج الخاص بك (بسيط جدا).

ثم استخدام جدول المهام لتشغيل ملف .bat في الساعة 3 صباحا يوميا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top