Spec-Zone.ru › Tcllib

cron

ИМЯ

cron — инструмент для автоматизации периодического вызова команд

Содержание

  • Содержание

  • Краткое описание

  • Описание

  • Команды

  • Ошибки, идеи, отзывы

  • Категория

  • Авторские права

КРАТКОЕ ОПИСАНИЕ

package require Tcl 8.6 9
package require cron ?2.2?

::cron::at ?processname? timecode command
::cron::cancel processname
::cron::every processname frequency command
::cron::in ?processname? timecode command
::cron::object_coroutine object coroutine ?info?
::cron::sleep milliseconds
::cron::task delete process
::cron::task exists process
::cron::task info process
::cron::task set process field value ?field...? ?value...?
::cron::wake ?who?
::cron::clock_step milliseconds
::cron::clock_delay milliseconds
::cron::clock_sleep seconds ?offset?
::cron::clock_set newtime

ОПИСАНИЕ

Пакет cron предоставляет набор инструментов на чистом Tcl, позволяющих программам планировать выполнение задач через регулярные интервалы. Вместо того чтобы заставлять каждую задачу самостоятельно обращаться к циклу обработки событий, система cron имитирует утилиту cron в Unix: задача периодически проверяет, нужно ли что-либо выполнить, и запускает все команды, назначенные на определённый момент времени, одновременно.

Изменения в версии 2.0

Изначально cron предназначался для работы с временными интервалами > 1 секунды, однако последняя версия поддерживает точность времени вплоть до миллисекунд, что упрощает интеграцию с другими событиями, связанными со временем. Версия 2.0 также поддерживает корректную интеграцию с сопрограммами и объектами. Кроме того, добавлена возможность использовать внешние часы (или часы, управляемые скриптом). Обратите внимание, что события в стиле vwait не будут хорошо работать с внешними часами.

Команды

  • ::cron::at ?processname? timecode command

    Эта команда регистрирует command для вызова в момент времени, заданный параметром timecode. Если timecode задан целым числом, он считается временем в формате Unix. Все остальные значения обрабатываются командой clock scan и преобразуются во время Unix. Эту задачу можно изменить последующими вызовами команд данного пакета, указав processname. Если processname уже существует, он будет заменён. Если processname не указан, команда сгенерирует и вернёт его.

    ::cron::at start_coffee {Tomorrow at 9:00am}  {remote::exec::coffeepot power on}
    ::cron::at shutdown_coffee {Tomorrow at 12:00pm}  {remote::exec::coffeepot power off}
    
  • ::cron::cancel processname

    Эта команда отменяет регистрацию процесса processname и отменяет все ожидающие команды. Примечание: processname может быть процессом, созданным с помощью ::cron::at или ::cron::every.

    ::cron::cancel check_mail
    
  • ::cron::every processname frequency command

    Эта команда регистрирует command для вызова с интервалом, заданным параметром frequency. Значение frequency указывается в секундах. Эту задачу можно изменить последующими вызовами команд данного пакета, указав processname. Если processname уже существует, он будет заменён.

    ::cron::every check_mail 900  ::imap_client::check_mail
    ::cron::every backup_db  3600 {::backup_procedure ::mydb}
    
  • ::cron::in ?processname? timecode command

    Эта команда регистрирует command для вызова по истечении задержки, заданной параметром timecode. Значение timecode указывается в секундах. Эту задачу можно изменить последующими вызовами команд данного пакета, указав processname. Если processname уже существует, он будет заменён. Если processname не указан, команда сгенерирует и вернёт его.

  • ::cron::object_coroutine object coroutine ?info?

    Эта команда регистрирует сопрограмму coroutine, связанную с объектом object, для вызова с параметрами info. Если параметры не заданы, предполагается, что сопрограмма является фоновой задачей, которая завершится самостоятельно. Значение info можно задать в любом формате, совместимом с командой ::cron::task set.

  • ::cron::sleep milliseconds

    При вызове внутри сопрограммы эта команда зарегистрирует сопрограмму для обратного вызова в назначенное время и немедленно приостановит её выполнение.

    Если значение переменной ::cron::time больше 0, эта команда будет продвигать внутреннее время шагами по 100 мс.

    Во всех остальных случаях команда создаст фиктивную переменную, запланирует вызов after и будет ожидать переменную с помощью vwait:

    set eventid [incr ::cron::eventcount]
    set var ::cron::event_#$eventid
    set $var 0
    ::after $ms "set $var 1"
    ::vwait $var
    ::unset $var
    

    Использование:

    ::cron::sleep 250
    
  • ::cron::task delete process

    Удаляет процесс, указанный в параметре process.

  • ::cron::task exists process

    Возвращает true, если process зарегистрирован в cron.

  • ::cron::task info process

    Возвращает dict с описанием process. Описание параметров см. в команде ::cron::task set.

  • ::cron::task set process field value ?field...? ?value...?

    Если process не существует, он создаётся. Доступные параметры:

    • command

      Если coroutine имеет значение black, это глобальная команда, реализующая данный процесс. Если coroutine не имеет значения black, это команда для создания или повторного создания сопрограммы.

    • coroutine

      Имя сопрограммы (если она есть), реализующей данный процесс.

    • frequency

      Если значение равно -1, процесс завершается после следующего события. Если значение равно 0, процесс должен вызываться при каждом событии простоя. Если значение положительное, процесс должен периодически генерировать события. Частота — это целое число миллисекунд между событиями.

    • object

      Объект, связанный с этим процессом или сопрограммой.

    • scheduled

      Если значение не равно нулю, это абсолютное время от начала эпохи (в миллисекундах), когда данный процесс вызовет событие. Если значение равно нулю и frequency также равно нулю, процесс вызывается при каждом цикле простоя.

    • running

      Логический флаг. Значение true указывает, что процесс не завершился и не приостановился во время цикла обработки событий; он не будет вызван снова, пока этого не произойдёт.

  • ::cron::wake ?who?

    Активирует cron и планирует запуск его цикла обработки событий во время следующего цикла простоя.

    ::cron::wake {I just did something important}
    

Предусмотрено несколько вспомогательных команд, используемых внутри cron и для тестирования cron; в обычных случаях они могут быть полезны или не понадобиться.

  • ::cron::clock_step milliseconds

    Возвращает абсолютное время относительно начала эпохи, соответствующее следующей границе между секундами для значения milliseconds.

  • ::cron::clock_delay milliseconds

    Возвращает абсолютное время относительно начала эпохи, соответствующее следующей границе между секундами, которая наступит через milliseconds.

  • ::cron::clock_sleep seconds ?offset?

    Возвращает абсолютное время относительно начала эпохи, которое наступит ровно через seconds. Если задано значение offset, оно может быть положительным или отрицательным и сдвинет конечное время на момент до или после смены секунды.

  • ::cron::clock_set newtime

    Устанавливает внутренние часы cron. Эта команда будет продвигать время шагами по 100 мс, вызывая события, пока внутреннее время не достигнет значения newtime.

    Значение newtime задаётся в абсолютных миллисекундах с начала эпохи.

Ошибки, идеи, отзывы

В этом документе и описываемом им пакете, несомненно, могут содержаться ошибки и другие проблемы. Просьба сообщать о них в категории odie системы отслеживания ошибок Tcllib. Также сообщайте о любых идеях по улучшению пакета и/или документации.

При предложении изменений кода предоставляйте унифицированные различия, то есть вывод команды diff -u.

Обратите также внимание, что вложения предпочтительнее встроенных исправлений. Чтобы добавить вложение, откройте форму Редактировать соответствующей заявки сразу после её создания и нажмите крайнюю левую кнопку на дополнительной панели навигации.

КАТЕГОРИЯ

Система

АВТОРСКИЕ ПРАВА

Авторские права © 2016-2018 Sean Woods

Licensed under the BSD license
https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/cron/cron.md

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API