NaviServer - programmable web server

[ Main Table Of Contents | Table Of Contents | Keyword Index ]

ns_schedule(n) 4.99.19 naviserver "NaviServer Built-in Commands"

Name

ns_schedule - Scheduling Tcl scripts

Table Of Contents

Synopsis

Description

These commands perform scheduling of Tcl scripts at various intervals. Script will run in separate thread as background procedures. This functionality is similar to Unix cron.

COMMANDS

ns_schedule_proc ?-once? ?-thread? interval script

This command schedules a script to be run after a certain number of seconds. Returns the ID of the newly scheduled script. If -once is specified, then the script is run once and then unscheduled, otherwise it will continue to run every interval seconds. If -thread is specified, then the script will be run in its own thread, otherwise it will run in the scheduler's thread. If the script is long-running, this may interfere with the running of other scheduled scripts, so long-running scripts should be run in their own threads.

   % set id [[ns_schedule_proc -once 60 { ns_log notice "this should run in 60 seconds" }]]
   123
ns_schedule_weekly ?-once? ?-thread? day hour minute script

This command schedules a script to be run on a certain day of the week at a certain hour and minute of that day. Returns the ID of the newly scheduled script. The week starts on Sunday as day zero and runs to Saturday as day six. If -once is specified, then the script is run once and then unscheduled, otherwise it will continue to run every week on that day at that time. If -thread is specified, then the script will be run in its own thread, otherwise it will run in the scheduler's thread. If the script is long-running, this may interfere with the running of other scheduled scripts, so long-running scripts should be run in their own threads. NOTE: day, hour and minute are specified in local time. Beware of Daylight Savings Time shifts affecting the time of day when the script will execute.

   % set id [[ns_schedule_weekly -once 2 5 35 { ns_log notice "It is now Tuesday at 5:35 AM." }]]
   123
   % ns_unschedule_proc $id
ns_schedule_daily ?-once? ?-thread? hour minute script

This command schedules a script to be run at a certain hour and minute of the day. Returns the ID of the newly scheduled script. If -once is specified, then the script is run once and then unscheduled, otherwise it will continue to run every day at that time. If -thread is specified, then the script will be run in its own thread, otherwise it will run in the scheduler's thread. If the script is long-running, this may interfere with the running of other scheduled scripts, so long-running scripts should be run in their own threads. NOTE: hour and minute are specified in local time. Beware of Daylight Savings Time shifts affecting the time of day when the script will execute.

   % set id [[ns_schedule_daily -once 5 35 { ns_log notice "It is now 5:35 AM." }]]
   123
   % ns_unschedule_proc $id
ns_pause id

Pause a scheduled script from running. This command pauses a scheduled script from running at its next scheduled time. Returns 1 on success, 0 on failure.

   % set id [[ns_schedule_daily 1 0 { ns_log notice "One AM and all is well.  *gong*" }]]
   19
   
   % ns_pause $id
   1
ns_resume id

Resume a previously paused scheduled script. This command resumes scheduling of a previously paused script via ns_pause. Returns 1 on success, 0 on failure.

   % set id [[ns_schedule_daily 1 0 { ns_log notice "One AM and all is well.  *gong*" }]]
   19
   
   % ns_pause $id
   1
   
   % ns_resume $id
   1
ns_after seconds script

Execute a command after a time delay. This command executes a script in the background after a number of seconds time delay. It does this by scheduling a one-shot event in the scheduler. Uncaught script errors will go to the server log. It returns an ID which can be used to unschedule the execution of the script (if seconds hasn't elapsed) using ns_unschedule_proc.

The script when executed will run in the scheduler thread. If the script is long-running, this may interfere with the execution of other scheduled scripts, in which case ns_schedule_proc should be used instead of ns_after.

   % ns_after 5 { ns_log notice "ns_after script executed" }
   123
ns_unschedule_proc id

Unschedules a previous scheduled script.

NOTE: Current behavior is to silently return without error if the id doesn't represent a currently scheduled ID.

   % ns_unschedule_proc $id

Logging

When entries are written from scheduled procedures to the server log via ns_log these entries can be identified by the string

...[-sched:THREAD_NR:COUNTER_IN_THREAD:SCHED_ID-]...

where THREAD_NR refers to the nth thread, COUNTER_IN_THREAD is the nth job in this thread and the SCHED_ID refers to the ID of the scheduled script as returned by the ns_schedule* commands.

See Also

ns_job, ns_log, nsd

Keywords

background, global built-in, schedule