What's a simple way to run a command, say, 8 hours from now? I can think of this way:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Is there a more "proper" way?
What's a simple way to run a command, say, 8 hours from now? I can think of this way:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Is there a more "proper" way?
You can use the
at
command. Theat
execute commands at a later time. Theat
utility shall read commands from standard input and group them together as an at-job, to be executed at a later time.Usually,
at
is installed by default in Ubuntu, but if your release doesn't include it, install via:For more information, options, examples, and others, see the manpage in
man 1 at
.Example of a relative time specification (note the space between
+
and the duration):You can also use convenient shorthands, like
tomorrow
ornoon
, as inNote: This will run the command to the left of the pipe immediately - and its output (which is piped to
at
) will be run byat
at the scheduled time. So, the above command schedulestweet fore
to be run at teatime.The example also demonstrates how you can pipe actions into
at
.at -c
is the way you can examine scheduled actions, which you can conveniently list with their number, as with:Yes, you can set a cron job.
For example if now the time is 14:39:00 and today is friday, 30 august, you can add the following cron job (to be executed after 8 hours) in your crontab file using
crontab -e
command:More about:
Use the Gnome-based GUI for
cron
,at
, and the like:The introduction of the CronHowto suggests using the
gnome-schedule
gui, which is much nicer than typing all the garbage into the terminal (esp. for "average" Ubuntu users who are not "power" *nix/bsd users.)Run it by using the Unity Dash (or other applications menu) to look for Scheduled Tasks or running
gnome-schedule
.Using
gnome-schedule
, for a script in your home directory, a new "at" command would be set up using this type of window:Check the output of
date
in a loop. This is a quick and dirty way to do this, like if you can't useat
,cron
, or other tools.Say you want your script to run at noon:
Say you want it to run tomorrow at noon (today is Nov 24 for me):
Previously, this answer recommended regex, which has some pitfalls, like a lot of special characters. As well it recommended matching against the whole date string, which is more error-prone since it's locale-dependent. For example, I use some French locale formats since I live in Quebec, so if I forget about that and write
until [[ $(date) == "25 12:00" ]]
, it will never match because the French ordering is "day month year, time" instead of the English "month day time year".If you are running bash on a mac you will run into some difficulties using the
at
program. In that case you can improve on your original proposed solution of,with this,
which is a more readable form of how long you want to wait. In this example
8
is the number of hours you want to wait before running your scriptmycommand.sh
.In order to install
gnome-schedule
on Ubuntu 21.04 you can do