---
name: "snooze"
section: "1"
platform: "linux"
package: "snooze"
version: "0.5-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/snooze"
---

# snooze(1)

run a command at a particular time

## NAME

**snooze** – run a command at a particular time

## SYNOPSIS

**snooze** \[**-nv**\] \[**-t** *timefile*\] \[**-T** *timewait*\] \[**-R** *randdelay*\] \[**-J** *jitter*\] \[**-s** *slack*\] \[**-d** *day*\] \[**-m** *mon*\] \[**-w** *wday*\] \[**-D** *yday*\] \[**-W** *yweek*\] \[**-H** *hour*\] \[**-M** *min*\] \[**-S** *sec*\] *command ...*

## DESCRIPTION

**snooze** waits until a particular time and then runs a command. Together with a service supervision system such as [runsv(8)](/runsv/8.md), this can be used to replace [cron(8)](/cron/8.md).

The options are as follows:

- **-n**

  Dry run: print the next 5 times the command would run and exit.

- **-v**

  Verbose: print scheduled (and rescheduled) times.

- **-t**, **-T**

  See below, TIMEFILES.

- **-R**

  Delay determination of scheduled time randomly up to *randdelay* seconds later.

- **-J**

  Delay execution randomly up to *jitter* seconds later than scheduled time.

- **-s**

  Commands are executed even if they are *slack* (default: 60) seconds late.

The durations *randdelay* and *slack* and *timewait* are parsed as seconds, unless a postfix of **m** for minutes, **h** for hours, or **d** for days is used.

The remaining arguments are patterns for the time fields:

- **-d**

  day of month

- **-m**

  month

- **-w**

  weekday (0-7, sunday is 0 and 7)

- **-D**

  day of year (1..366)

- **-W**

  ISO week of year (1..53)

- **-H**

  hour

- **-M**

  minute

- **-S**

  second

The following syntax is used for these options:

- **-d** **3**

  exact match: run on the 3rd

- **-d** **3,10,27**

  alternation: run on 3rd, 10th, 27th

- **-d** **1-5**

  range: run on 1st, 2nd, 3rd, 4th, 5th

- **-d** **\***

  star: run every day

- **-d** **/5**

  repetition: run on 5th, 10th, 15th, 20th, 25th, 30th day

- **-d** **2/5**

  shifted repetition: run on 7th, 12th, 17th, 22nd, 27th day

and combinations of those, e.g. **-d** **1-10,15/5,28**.

The defaults are **-d\*** **-m\*** **-w\*** **-D\*** **-W\*** **-H0** **-M0** **-S0**, that is, every midnight.

Note that *all* patterns need to match (contrary to [cron(8)](/cron/8.md) where either day of month *or* day of week matches), so **-w5** **-d13** only runs on Friday the 13th.

If **snooze** receives a SIGALRM signal, the command is immediately executed.

## TIMEFILES

Optionally, you can keep track of runs in time files, using **-t**:

When **-T** is passed, execution will not start earlier than the mtime of *timefile* plus *timewait* seconds.

When **-T** is *not* passed, **snooze** will start finding the first matching time starting from the mtime of *timefile*, and taking *slack* into account. (E.g. **-H0** **-s** **1d** **-t** **timefile** will start an instant execution when timefile has not been touched today, whereas without **-t** this would always wait until next midnight.)

If *timefile* does not exist, it will be assumed outdated enough to ensure earliest execution.

**snooze** does not update the timefiles, your job needs to do that! Only mtime is looked at, so [touch(1)](/touch/1.md) is good.

## EXIT STATUS

The **snooze** utility exits 0 on success, and \>0 if an error occurs.

The *command* is run using exec, so its exit status gets propagated to the parent.

If no command was given, **snooze** just returns with status 0.

## SEE ALSO

runwhen(1), [sleep(1)](/sleep/1.md), uschedule(1), [cron(8)](/cron/8.md)

## AUTHORS

Leah Neukirchen ⟨*leah@vuxu.org*⟩

## LICENSE

**snooze** is in the public domain.

To the extent possible under law, the creator of this work has waived all copyright and related or neighboring rights to this work.

**http://creativecommons.org/publicdomain/zero/1.0/**
