Cron

From Base de connaissances eggdrops & TCL
Jump to: navigation, search


Description

Le package CRON fournit des outils en pur Tcl qui permettent de planifier des tâches à intervalles réguliers. Plutôt que de forcer une procédure à s'auto-appeler par un timer, le package mime les outils Crontab d'unix: une tâche vérifie périodiquement si quelque chose doit être fait, et lance les commandes chaque fois que nécessaire.

Synopsys

::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

Commandes

at

::cron::at ?processname? timecode command

Cette commande enregistre une command à appeler à l'heure spécifiée par timecode. Si timecode est un entier, il est supposé être en temps unix. Toutes les autres entrées seront interprétées par Clock scan et converties en heure Unix. Cette tâche peut être modifiée par des appels ultérieurs aux commandes de ce package en référençant processname. Si processname existe, il sera remplacé. Si processname n'est pas donné, il est généré et renvoyé par la commande. Exemples

::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}

cancel

::cron::cancel processname

Cette commande supprime processname et annule toutes ses commandes en attente.

Note: processname peut être un processus créé par ::cron::at ou ::cron::every Exemples

::cron::cancel check_mail

every

::cron::every processname frequency command

Cette commande référence command pour qu'elle soit appelée à l'intervalle de frequency (en secondes). Cette tâche peut être modifiée par d'autres appels à ::cron qui référencent processname. Exemples

::cron::every check_mail 900  ::imap_client::check_mail
::cron::every backup_db  3600 {::backup_procedure ::mydb}

in

::cron::in ?processname? timecode command

Cette commande référence command pour qu'elle soit exécuté après un délai de timecode (en secondes). Cette commande référence command pour qu'elle soit appelée à l'intervalle de frequency (en secondes). Cette tâche peut être modifiée par d'autres appels à ::cron qui référencent processname.

object_coroutine

::cron::object_coroutine object coroutine ?info?

Cette commande référence une coroutine, associée à l'objet object qui sera appelé avec les paramètres info. Si aucun paramètre n'est fourni, la coroutine est présumée être une tâche inactive (idle) qui se terminera seule. info peut être donné dans tous les formats compatibles avec ::cron::task set

sleep

::cron::sleep milliseconds

Lorsqu'elle est exécutée dans une coroutine, cette commande enregistre la coroutine pour un rappel à l'heure indiquée, et sort immédiatement.

Eye.png Cet article est en cours de traduction, n'hésitez pas à aider


If the ::cron::time variable is > 0 this command will advance the internal time, 100ms at a time.

In all other cases this command will generate a fictious variable, generate an after call, and vwait the variable:

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

Usage:

::cron::sleep 250

task

task delete

::cron::task delete process

Delete the process specified the process

task exists

::cron::task exists process

Returns true if process is registered with cron.

task info

::cron::task info process

Returns a dict describing process. See ::cron::task set for a description of the options.

task set

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

If process does not exist, it is created. Options Include:

  • command : If coroutine is black, a global command which implements this process. If coroutine is not black, the command to invoke to create or recreate the coroutine.
  • coroutine : The name of the coroutine (if any) which implements this process.
  • frequency : If -1, this process is terminated after the next event. If 0 this process should be called during every idle event. If positive, this process should generate events periodically. The frequency is an integer number of milliseconds between events.
  • object : The object associated with this process or coroutine.
  • scheduled : If non-zero, the absolute time from the epoch (in milliseconds) that this process will trigger an event. If zero, and the frequency is also zero, this process is called every idle loop.
  • running : A boolean flag. If true it indicates the process never returned or yielded during the event loop, and will not be called again until it does so.

wake

::cron::wake ?who?

Wake up cron, and arrange for its event loop to be run during the next Idle cycle. Exemples:

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

Several utility commands are provided that are used internally within cron and for testing cron, but may or may not be useful in the general cases.

clock_*

clock_step

::cron::clock_step milliseconds

Return a clock time absolute to the epoch which falls on the next border between one second and the next for the value of milliseconds

clock_delay

::cron::clock_delay milliseconds

Return a clock time absolute to the epoch which falls on the next border between one second and the next milliseconds in the future.

clock_sleep

::cron::clock_sleep seconds ?offset?

Return a clock time absolute to the epoch which falls exactly seconds in the future. If offset is given it may be positive or negative, and will shift the final time to before or after the second would flip.

clock_set

::cron::clock_set newtime

Sets the internal clock for cron. This command will advance the time in 100ms increment, triggering events, until the internal time catches up with newtime.

newtime is expressed in absolute milliseconds since the beginning of the epoch.

Voir aussi