Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am looking for a method built-in to ubuntu that will allow me to run a script or program or whatever for a fixed period of time.

I found a program that does this in a way I like, but the package is unavailable for Ubuntu. In any case, I was hoping for something built-in.

The only thing i can think of is to get the current time and set a cron job 30 minutes from 'now' that will kill the program. I was hoping there was a way to do this without setting up a script, but if I need to - it wont be the end of the world. After the 30 minute interval I would like to put my laptop in a sleep mode, but this can be separate from the timer thing.

Thanks in advance.

share|improve this question
up vote 9 down vote accepted

I've just wrote the following and it seems to work:

ping PID=$!; sleep 3; kill $PID

Of course you should substitute ping with the command you want to run and 3 with a timeout in seconds. Let me know if you need a more detailed explanation on how it works.

share|improve this answer
This exits in a syntax error after '&;'. For example just running 'vlc &;' gets the same error; but I see what you are trying to do... – Teque5 May 26 '11 at 18:54
Sorry about that, I tested it on Zsh instead of Bash. It works when you remote the semicolon, corrected. – Adam Byrtek May 26 '11 at 18:57
Well when i remove the semicolon it doesn't get the PID. I get: 'bash: kill: $!: arguments must be process or job IDs'. It does TRY to kill it after 10 seconds though... – Teque5 May 26 '11 at 19:00
Just remove the backslash before !. Once more sorry for the confusion. – Adam Byrtek May 26 '11 at 19:09
OK we got a winner. Thanks. – Teque5 May 26 '11 at 19:19

Why not use /usr/bin/timeout?

$ timeout --help
  or:  timeout [OPTION]
Start COMMAND, and kill it if still running after DURATION.
share|improve this answer

A simple (and not much tested) version of hatimerun:


    echo "Usage"  >&2
    echo "  $0 -t TIME COMMAND" >&2
    exit 1

TEMP=`getopt -o t: -n "$0" -- "$@"`

if [ $? != 0 ] ; then 

eval set -- "$TEMP"

while true ; do
    case "$1" in
    -t) timeout=$2; shift  2;;
    --) shift; break;;

if [ -z "$timeout" ]; then


echo "kill $!" | at now+$timeout

See the manpage of at for how to specify the time. Like with at the minimum time resolution is 1 minute.

Another way is to use upstart instead of this script.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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