Como executar um programa por um período fixo de tempo?

6

Eu estou procurando um método embutido no Ubuntu que me permita executar um script ou programa ou qualquer coisa por um período fixo de tempo.

Eu encontrei um programa que faz isso em uma maneira que eu gosto , mas o pacote não está disponível para o Ubuntu. De qualquer forma, eu estava esperando por algo embutido.

A única coisa em que consigo pensar é a hora atual e definir um cron job a 30 minutos de 'now' que matará o programa. Eu estava esperando que houvesse uma maneira de fazer isso sem configurar um script, mas se eu precisar - não será o fim do mundo. Após o intervalo de 30 minutos, gostaria de colocar meu laptop em modo de espera, mas isso pode ser separado da coisa do timer.

Obrigado antecipadamente.

    
por Teque5 26.05.2011 / 18:50

3 respostas

12

Acabei de escrever o seguinte e parece funcionar:

ping google.com& PID=$!; sleep 3; kill $PID

É claro que você deve substituir o ping pelo comando que deseja executar e 3 com um tempo limite em segundos. Deixe-me saber se você precisa de uma explicação mais detalhada sobre como isso funciona.

    
por Adam Byrtek 26.05.2011 / 19:18
14

Por que não usar /usr/bin/timeout ?

$ timeout --help
Usage: timeout [OPTION] DURATION COMMAND [ARG]...
  or:  timeout [OPTION]
Start COMMAND, and kill it if still running after DURATION.
    
por waltinator 07.02.2012 / 22:24
3

Uma versão simples (e não muito testada) de hatimerun :

#!/bin/sh

help(){
    echo "Usage"  >&2
    echo "  $0 -t TIME COMMAND" >&2
    exit 1
}

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

if [ $? != 0 ] ; then 
    help
fi

eval set -- "$TEMP"

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

if [ -z "$timeout" ]; then
 help
fi

cmd="$*"

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

Veja a página de manual sobre como especificar a hora. Como com at , a resolução de tempo mínimo é de 1 minuto.

Outra maneira é usar o upstart em vez deste script.

    
por Florian Diesch 26.05.2011 / 19:50