Skip to main content
Version: Latest (4.5.0)

Function: ScheduledScript(config)

Creates a Scheduled Script Execution: a server-side script that runs automatically on a defined schedule (sys_script_execution).

Parameters

config

ScheduledScript

Configuration for the scheduled script

Properties:

  • $id (required): string | number | ExplicitKey<string>

  • active (optional, default: true): boolean Indicates whether the scheduled job is active and will run

  • advanced (optional, default: false): boolean Indicates whether this job can run in advanced mode

  • businessCalendar (optional): string | Record<'business_calendar'> Reference to a business calendar for calendar-based scheduling (sys_id of business_calendar) or new calendar record

  • condition (optional): string Script-based condition that must evaluate to true for the job to run. Only evaluated when conditional is true.

  • conditional (optional, default: false): boolean If true, the job only runs when the condition script evaluates to true. Allows conditional execution of the job.

  • dayOfMonth (optional): DayOfMonth Day of the month when the job runs (1-31)

  • dayOfWeek (optional): DayOfWeek Specific day of the week when the job runs (for weekly jobs)

  • daysOfWeek (optional): [DayOfWeek, ...DayOfWeek[]] Days of the week when the job runs (array of day names)

  • executionEnd (optional): string Date and time when the job should stop running. Jobs with ending values in the past are marked inactive

  • executionInterval (optional): Duration Interval between runs for periodic jobs

  • executionStart (optional): string Date and time when the job should start running

  • executionTime (optional): TimeOfDay Time of day when the job runs

  • frequency (optional): RunType Frequency at which the job runs.

  • maxDrift (optional): Duration Maximum time the job can drift from its scheduled time before being cancelled

  • month (optional): MonthOfYear Month when the job runs (1-12, for yearly jobs)

  • name (optional): string Name of the scheduled script execution job

  • offset (optional): Duration Offset duration from the scheduled time

  • offsetType (optional): 'future' | 'past' Direction of offset from the scheduled time.

    • future: Job runs after the scheduled time
    • past: Job runs before the scheduled time
  • protectionPolicy (optional): 'read' | 'protected' The policy determines whether someone can view or edit the scheduled job after the application is installed.

    • read: Allow other developers to see the script logic, but not change it
    • protected: Prevent other developers from changing this scheduled job
    • undefined: Allow other developers to customize the scheduled job
  • repeatEvery (optional): number For recurring trigger types, repeat only every Nth occurrence (e.g., 3 means every 3rd occurrence)

  • runAs (optional): string | Record<'sys_user'> User whose credentials are used to execute the scheduled job (sys_id or username)

  • script (optional): string Script to be executed when the job runs. Use Now.include('./script.js') for file-based editing with full IDE support (recommended), or provide an inline string

  • timeZone (optional, default: 'floating'): 'floating' Time zone in which the job runs. Use 'floating' for system time zone

  • upgradeSafe (optional, default: false): boolean Indicates if this scheduled job should be preserved during upgrades

  • userTimeZone (optional): string Time zone context for any GlideDateTime or relative date calculations inside the script. Defaults to the time zone defined in the user profile of the user specified in the "Run as" field.

  • weekInMonth (optional): WeekInMonth Week within the month when the job runs (1=First, 2=Second, 3=Third, 4=Fourth, 5=Fifth, 6=Sixth)

See

Examples

Basic Daily Scheduled Script

Create a simple scheduled script that runs daily at a specific time

/**
* @title Basic Daily Scheduled Script
* @description Create a simple scheduled script that runs daily at a specific time
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const DailyMaintenanceJob = ScheduledScript({
$id: Now.ID['daily_maintenance'],
name: 'Daily Maintenance Job',
active: true,
frequency: 'daily',
executionTime: { hours: 2, minutes: 0, seconds: 0 },
script: `
// Daily maintenance script
gs.info('Running daily maintenance...');
`,
})

Monthly Scheduled Script with Conditions

Create a monthly scheduled script with conditional execution and date range

/**
* @title Monthly Scheduled Script with Conditions
* @description Create a monthly scheduled script with conditional execution and date range
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const MonthlyBillingJob = ScheduledScript({
$id: Now.ID['monthly_billing'],
name: 'Monthly Billing Process',
active: true,
frequency: 'monthly',
dayOfMonth: 1,
executionTime: { hours: 0, minutes: 0, seconds: 0 },
executionStart: '2024-01-01 00:00:00',
executionEnd: '2025-12-31 23:59:59',
timeZone: 'UTC',
conditional: true,
condition: `
// Only run if billing is enabled
var billingEnabled = gs.getProperty('billing.enabled', 'false');
answer = billingEnabled === 'true';
`,
script: `
// Process monthly billing
gs.info('Processing monthly billing for: ' + new GlideDateTime().getDisplayValue());
`,
})

Periodic Scheduled Script

Create a scheduled script that runs at regular intervals

/**
* @title Periodic Scheduled Script
* @description Create a scheduled script that runs at regular intervals
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const PeriodicCheckJob = ScheduledScript({
$id: Now.ID['periodic_check'],
name: 'Periodic System Check',
active: true,
frequency: 'periodically',
executionInterval: { hours: 4, minutes: 0, seconds: 0 },
executionStart: '2024-01-01 00:00:00',
timeZone: 'UTC',
script: `
// Run periodic system checks every 4 hours
gs.info('Running system check at: ' + new GlideDateTime().getDisplayValue());
`,
})

Weekly Scheduled Script

Create a scheduled script that runs on specific days of the week

/**
* @title Weekly Scheduled Script
* @description Create a scheduled script that runs on specific days of the week
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const WeeklyReportJob = ScheduledScript({
$id: Now.ID['weekly_report'],
name: 'Weekly Report Generation',
active: true,
frequency: 'weekly',
daysOfWeek: ['monday', 'wednesday', 'friday'],
executionTime: { hours: 9, minutes: 0, seconds: 0 },
timeZone: 'America/New_York',
script: `
// Generate weekly reports
gs.info('Generating reports for: ' + new GlideDateTime().getDisplayValue());
`,
})

Scheduled Script with External File

Create a scheduled script that uses an external JavaScript file for better IDE support

/**
* @title Scheduled Script with External File
* @description Create a scheduled script that uses an external JavaScript file for better IDE support
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const DataCleanupJob = ScheduledScript({
$id: Now.ID['data_cleanup'],
name: 'Data Cleanup Job',
active: true,
frequency: 'daily',
executionTime: { hours: 3, minutes: 30, seconds: 0 },
timeZone: 'America/Los_Angeles',
script: Now.include('./cleanup-script.js'),
})

cleanup-script.js

// Example cleanup script for scheduled execution
// This script demonstrates how to use external files with Now.include()

gs.info('Starting data cleanup process...')

// Clean up old records
var gr = new GlideRecord('sys_audit_delete')
gr.addQuery('sys_created_on', '<', gs.daysAgo(90))
gr.query()
var deletedCount = 0

while (gr.next()) {
gr.deleteRecord()
deletedCount++
}

gs.info('Data cleanup completed. Deleted ' + deletedCount + ' records.')

Scheduled Script with Offset

Create a scheduled script that runs with an offset from the scheduled time

/**
* @title Scheduled Script with Offset
* @description Create a scheduled script that runs with an offset from the scheduled time
*/

import { ScheduledScript } from '@servicenow/sdk/core'

export const DelayedNotificationJob = ScheduledScript({
$id: Now.ID['delayed_notification'],
name: 'Delayed Notification Job',
active: true,
frequency: 'daily',
executionTime: { hours: 12, minutes: 0, seconds: 0 },
offset: { hours: 2, minutes: 30, seconds: 0 },
offsetType: 'future',
timeZone: 'America/Chicago',
script: `
// Send delayed notifications
// This runs at 2:30 PM (12:00 PM + 2.5 hours offset)
gs.info('Sending notifications at: ' + new GlideDateTime().getDisplayValue());
`,
})