Executar comando quando uptime = 20 min [fechado]

1

Eu preciso executar o script BASH quando uptime > = 20 min (por exemplo). Como eu posso fazer isso?

Por favor me ajude a criar um script para verificar o tempo de atividade do sistema e verificar se há mais 20 minutos de atividade - execute outro script.

Obrigado.

    
por Petro Pikh 20.10.2015 / 15:21

2 respostas

10

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ê.

    
por Rinzwind 20.10.2015 / 15:36
3

Para executar um script em 20 minutos após a inicialização, coloque em /etc/rc.local :

nohup your-script >/dev/null 2>&1 &

em que your-script tem sleep 1200 no início do script.

Ou crie um trabalho upstart ou especifique o comando @reboot cron ou configure "Startup Applications", etc, dependendo do que for mais apropriado no seu caso, veja Como executar scripts na inicialização?

Para executar um script se o tempo de atividade for maior que 20 minutos e outro caso contrário, no bash:

read -d. uptime < /proc/uptime
if (( uptime > 1200 ))
then
   one_script
else
   another_script
fi
    
por jfs 20.10.2015 / 19:34