Как это делается лучше всего? Я хочу, чтобы приложение, которое запускалось на сервере, запускало событие каждую ночь в 03:00.Как вызвать событие в 03:00 каждую ночь?
ответ
Использование планировщика задач Windows
Таким образом, ресурсы не теряются в ожидании, если вы пытаетесь постоянно поддерживать программу. – monksy
Я согласен, в общем, если это не добавляется к существующей, все готовой к запуску службе, а «событию» нужны данные от службы к функции. В таких ситуациях таймер потенциально лучше ... –
i холодный режим работы windows schefuler да, но как wold я делаю это с кодом, интересно узнать – Darkmage
планировщика задач Windows (как это было предложено klausbyskov) или работу SQL Server.
EDIT:
Или, если вы хотите dyanically назначенного времени, вы можете создать службу Windows, которая опрашивает каждые 10 минут, и выполняет какое-то действие в нужное время (ов).
Вы можете сделать таймер с интервалом в 1 секунду, а когда таймер погаснет, проверьте, равно ли оно 3:00.
1 секунда для того, что происходит один раз каждые 86400 секунд, является излишним! –
Это оживленное ожидание. Это отличный способ тратить энергию и мощность процессора, но если Darkmage хочет использовать другие программы на своей машине, я не рекомендую это делать. –
Я знаю, что это слишком много, но он начнется ровно в 03:00 ... Также 1 небольшая проверка каждую секунду не собирается тратить много сил. – DaMacc
Здесь есть два основных варианта.
Если вы пытаетесь сделать это в рамках существующей службы, вы можете использовать Timer, чтобы запускать себя в 3:00 каждую ночь и запускать свою «задачу».
Это, как говорится, обычно лучше обрабатывается через Windows Task Scheduler. Вместо того, чтобы поддерживать приложение 24/7, вы просто планируете его запускать один раз в день в 3:00.
Edit:
Если вам необходимо работать с планировщиком задач из кода (упомянутый в другом комментарии), что также возможно. Планировщик заданий предоставляет API для настройки индивидуальных задач (ITask) с помощью планировщика задач (ITaskScheduler).
Однако, учитывая, что вы работаете с XP Embedded, вам, вероятно, лучше использовать обычные возможности настройки системы и настроить задачу для запуска один раз в день. Во встроенной системе вы должны иметь достаточный контроль во время развертывания, чтобы сделать это.
Вам нужно будет создать его в службе, чтобы убедиться, что он работает, даже если в машине нет входа в систему, а затем существует множество разных методов для обеспечения запуска триггера.
Рассмотрите возможность сделать System.Timers.Timer
, где Interval
настроен на разницу между DateTime.Now
и следующими 3:00.
Это зависит от того, что у вас есть.
Лучше всего использовать cron работу, если вы на Linux/Unix/Mac OS X, планировщик задач на Windows, или launchd на более новых версиях Mac OS X.
Если вы хотите сделайте это из приложения, вам понадобится цикл, который проверяет время на регулярной основе и запускает событие, если он 03:00, но это не идеально.
Creating a windows server in C# довольно тривиальный и может это сделать. Просто убедитесь, что вы получили информацию о безопасности и регистрации, потому что может быть довольно сложно сказать, что происходит, пока она работает (или не работает).
Я создаю нить в ASP.NET для выполнения запланированных задач.
Вот упрощенная версия сервиса, который мы писали, что работает таймер каждые 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.
Если вы хотите сделать это при запуске кода приложения (вместо использования планировщика задач), вы должны выбрать продолжительность, чтобы ваше приложение выглядело довольно долго (например, 1 час или 3600 секунд). Ваши петли приложений, и по истечении каждого вызова сна приложение периодически проверяет, сколько времени осталось до истечения крайнего срока (03:00). Как только оставшееся время сна станет ниже времени грубого интервала, оно должно быть уменьшено до более короткого интервала (с уменьшением вдвое или с уменьшением до 10 с). Продолжайте цикл, спать и уменьшайте интервал времени, пока не достигнут конечный срок.
Это предотвращает слишком частое пробуждение цикла (86 400 интервалов в 1 секунду - избыток), но также предотвращает чрезмерное превышение предельного срока приложения с помощью слишком длительного спящего режима.
Хороший момент, плохо реализуйте план, основанный на этом и то, что говорит DaMacc. – Darkmage
Этот ответ может быть немного левым полем, но мы часто используем CruiseControl.NET для некоторых из наших запланированных задач. Это не идеально подходит для всех, но если это большая работа, которую вы хотите запускать каждую ночь, и от этого зависит другой код/результаты, то это хороший выбор. Вы можете планировать его, чтобы запускать каждый раз, получать электронные письма, если он работал/не удалось. Запустите другие скрипты/код, если он не работает, очистите файлы, которые вам нужны, прежде чем вы начнете и после.
Не идеальное решение для любой ситуации, но оно мощное для тех, кто его требует. Мы используем его для некоторых наших больших заданий обработки данных, и он отправляет нам все электронные письма, если он сработал/не удался, и даже попробует снова через 30 минут, если он не будет выполнен в первый раз. Это дает вам приятное нечеткое чувство :)
Возможно ли запустить программу через командную строку? Если это так, создайте файл foo.bat и вызовите командную строку программы (очень просто).
Затем используйте Task Scheduler для запуска .bat-файла в 3 часа дня ежедневно.
- 1. BroadcastReceiver (TIME_TICK) умирает каждую ночь?
- 2. Как запустить программу nodejs каждую ночь?
- 3. автоматическое обновление asp.net Кэш каждую ночь
- 4. JCL, JOB для запуска каждую ночь
- 5. материализованные представления, что обновляет каждую ночь
- 6. Почему каждое соединение MySQL прерывается каждую ночь?
- 7. Принудительная очистка вылета каждую ночь на TeamCity
- 8. Как запускать метод каждую ночь на кластере JEE
- 9. Как перезапустить мое приложение для флиса python каждую ночь?
- 10. PHP: Как установить таймер на каждую ночь 12:00 am
- 11. Чистота/Полная перестройка проекта каждую ночь в CruiseControl.NET
- 12. Лучший способ импортировать 80.000 продуктов в Magento каждую ночь?
- 13. Как вызвать метод каждую секунду?
- 14. ESXi 5.1 возвращается к снимку ежедневно или каждую ночь
- 15. PHP-скрипт автоматически запускается каждый раз каждую ночь
- 16. Какая разница типов построить: каждую ночь, релиз, отлаживать, DEV
- 17. сервер Ubuntu меняет IP каждую ночь «старый» адрес DHCP
- 18. Как вызвать функцию в каждую минуту «Х»?
- 19. Как вызвать это событие?
- 20. Как вызвать событие касания?
- 21. Как вызвать событие onMousewheel?
- 22. Как вызвать это событие?
- 23. Как вызвать событие click?
- 24. Как вызвать событие scrollViewWillEndDragging?
- 25. как вручную вызвать событие
- 26. Как вызвать событие GridView_CellContentClick?
- 27. вызвать событие
- 28. Как вызвать загруженное событие combobox на winload
- 29. Как вызвать (возможно) переопределенное событие?
- 30. Как вызвать событие перед Environment.Exit()?
В какой ОС работает ваш сервер? –
его встроенный XP – Darkmage
Работает ли он на одиночном компьютере под вашим контролем или вы собираетесь распространять его для конечных пользователей и предоставить им возможность изменять это время в ближайшем будущем (например, антивирусный пакет)? – Mayo