How do I set up cron to run a file just once at a specific time? [closed] How do I set up cron to run a file just once at a specific time? [closed] unix unix

How do I set up cron to run a file just once at a specific time? [closed]


You really want to use at. It is exactly made for this purpose.

echo /usr/bin/the_command options | at now + 1 day

However if you don't have at, or your hosting company doesn't provide access to it, you can have a cron job include code that makes sure it only runs once.

Set up a cron entry with a very specific time:

0 0 2 12 * /home/adm/bin/the_command options

Next /home/adm/bin/the_command needs to either make sure it only runs once.

#! /bin/bashCOMMAND=/home/adm/bin/the_commandDONEYET="${COMMAND}.alreadyrun"export PATH=/usr/bin:$PATHif [[ -f $DONEYET ]]; then  exit 1fitouch "$DONEYET"# Put the command you want to run exactly once here:echo 'You will only get this once!' | mail -s 'Greetings!' me@example.com


Try this out to execute a command on 30th March 2011 at midnight:

0 0 30 3 ? 2011  /command

WARNING: As noted in comments, the year column is not supported in standard/default implementations of cron. Please refer to TomOnTime answer below, for a proper way to run a script at a specific time in the future in standard implementations of cron.


You really want to use at. It is exactly made for this purpose.

echo /usr/bin/the_command options | at now + 1 day

However if you don't have at, or your hosting company doesn't provide access to it, you could make a self-deleting cron entry.

Sadly, this will remove all your cron entries. However, if you only have one, this is fine.

0 0 2 12 * crontab -r ; /home/adm/bin/the_command options

The command crontab -r removes your crontab entry. Luckily the rest of the command line will still execute.

WARNING: This is dangerous! It removes ALL cron entries. If you have many, this will remove them all, not just the one that has the "crontab -r" line!