Não há necessidade de saber quando os 20 minutos se passaram. O comando "at" pode ser usado apenas para dizer ao sistema para fazer algo a 20 minutos de um determinado momento (e esse momento pode ser uma (re) inicialização).
Em /etc/crontab
put @reboot {user} /usr/local/bin/script.sh
e torne /usr/local/bin/script.sh
executável. Altere {user} para um nome de usuário ou "root".
Crie /usr/local/bin/script.sh
e quando você colocar isso ...
at -f /usr/local/bin/script2.sh now + 20 minutes
/usr/local/bin/script2.sh
será executado 20 minutos após a reinicialização. O período de tempo real pode variar um pouco (já que o processo de inicialização provavelmente já estará em andamento antes que o "crontab" seja executado. Apenas um exemplo, mas este é um método geral para criar um evento como esse.
/usr/local/bin/script2.sh
pode ser usado para adicionar mais linhas com pontos iniciais semelhantes (40 minutos da reinicialização, etc.)
Isto irá sobreviver a um reboot! Então, 5 reinicia dentro de 20 minutos = 5 vezes executando-o. Hmmm ... deixando aqui aqui.
Outra abordagem:
Se você precisar fazer isso a partir de um script, você também pode criar uma variável para ser incluída no script. 1º exemplo simples:
$uptime
16:11:31 up 1 day, 7:35, 2 users, load average: 0,10, 0,07, 0,06
~/tmp$ more test
uptime
~/tmp$ more test2
minutes=20;
at -f test now + $minutes minutes
E a execução de ./test2
mostrará
warning: commands will be executed using /bin/sh
job 7 at Tue Oct 20 16:29:00 2015
Agora, tudo o que você precisa fazer é alterar "minutos" para uma variável com base, por exemplo, em "tempo de atividade".
Este é um exemplo de como obter o tempo de atividade em minutos na variável "minutes":
minutes='awk '{print $0/60;}' /proc/uptime';
E este é um método para torná-lo condicional:
#!/bin/bash
minutes='awk '{print $0/60;}' /proc/uptime';
if [ $(echo "$minutes > 20" | bc) -ne 0 ]
then
at -f test now + 20 minutes
fi
- Se minutos maiores que 20 executam o script em 20 minutos a partir de agora.
Usando o bash puro:
#!/bin/bash
read -d. seconds < /proc/uptime
if (( $seconds > 20*60 ))
then
at -f test now + 20 minutes
fi
Isso deve começar você.