There are often times that I want my computer to do a single task, but not right now. For example, I could have it notify me in 30 minutes that it is time to leave work. Or maybe I want it to run a complicated test 2 hours from now when I'm sure most everyone else will be gone from the office.

I know I could create a cron job to run at a specific time of day, but that seems like a lot of work when all I want is something simple like "Run this script in 10 minutes", besides I'd have to figure out what time it will actually be X minutes/hours/days from now, and then delete the cron job once it finished.

Of course I could just write this script and run it in the background:

sleep X

But that just seems so clunky: I either need a new script for each task, or I need to write and maintain a script generic enough to do what I want, not to mention I have to figure out how many seconds are in the minutes, hours, or days I want.

Is there not an already established solution to this problem?

  • 7
    I'm guessing you've not run across at yet? – jw013 May 3 '12 at 0:09
  • this might seem very basic...but doesn't your system have any kind of calendar/todo list thing, with warnings? – JoséNunoFerreira May 3 '12 at 12:23

I use a simple script with at:

# email reminder notes using at(1)...

read -p "Time of message? [HH:MM] " time
read -p "Date of message? [dd.mm.yy] " date
read -p "Message body? " message

at "$time" "$date" <<EOF
echo "$message" | mailx -s "REMINDER" me@gmail.com

You could just as easily pipe the $message to notify-send or dzen if you wanted a desktop notification instead of an email.

  • 9
    Can also use relative time (+ 2 days) and different formats (YYYY-MM-DD). Consult the manpage for more details. – Arcege May 3 '12 at 0:30
  • Yes: us antipodeans prefer DD-MM-YY :) – jasonwryan May 3 '12 at 4:01
  • I usually us at for quickie one off scripts. My favorite lazy way to schedule an at job is "now +5 minutes" which could also be hours or days. – George M May 3 '12 at 20:47
  • +1 for script and for mentioning dzen and notify-send which I had not heard of. – Joe May 5 '12 at 21:27
  • The dzen redirection isn't working for me. unix.stackexchange.com/q/38362/4143 – Cory Klein May 10 '12 at 22:22

The generic way to use at is

Write a script that does what you want to do. Use the full path for all external commands, log output to a proper log-file or mail it.

Test the script.

Activate it with at -f YOURSCRIPT -t MMDDhhmm

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.