Precisa de ajuda para verificar se o tempo de atividade do computador é superior a 5 minutos

7

Eu tenho um script bash que é executado em um cron a cada minuto. Ele verifica se um programa necessário está sendo executado e o inicia, se não estiver. Ocasionalmente, ele será executado antes que o usuário tenha sido autenticado. Quero evitar que isso aconteça.

O que eu acho que gostaria de fazer é verificar o tempo de atividade do computador e ver se ele está ativo por 5 minutos, para que o login automático tenha a chance de ser concluído antes que o programa seja iniciado. Eu sou bastante novo para bater e analisar o que eu recebo de "uptime" para onde eu poderia usá-lo para comparação parece fora do meu alcance.

Alguém pode ajudar? Talvez haja uma solução melhor. Estou preso.

    
por rabid.sloth 09.11.2011 / 03:47

4 respostas

14

Um script / cron job é a solução errada para o problema que você está tentando resolver. Na verdade, risque - dois bash scripts / cron jobs são a solução errada para o seu problema. ;)

O problema que você está tentando resolver é "garantir que uma tarefa comece a ser executada depois que um usuário tiver efetuado login e assegure que ele continue em execução". Este é um trabalho para iniciantes.

O seguinte deve fazer o que você quer, e entra em / etc / init /. Nomeie o arquivo como user-session-job.conf.

description "Keep my very important program running"

start on desktop-session-start
stop on desktop-shutdown

respawn

script
    /path/to/my/very/important/program
end script

Por favor, veja o livro de receitas para mais ajuda: link

    
por achiang 09.11.2011 / 04:39
3

Desde que eu tive que alterar drasticamente o script do original, decidi postar isso como uma resposta separada. Não tenho certeza porque o código acima não funciona. Peço desculpas, eu deveria ter testado antes de postar. Eu verifiquei que o código abaixo, no entanto, funciona de fato.

#!/bin/bash

upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')"
upMins=$((${upSeconds} / 60))

if [ "${upMins}" -gt "5" ]
then
    echo "Up for ${upMins} minutes"
else
    echo "Up five minutes or less"
fi
    
por Drew Chapin 10.11.2011 / 02:29
1

Tente isso

#!/bin/bash
#
#   upt - show just the system uptime, days, hours, and minutes

let upSeconds="$(cat /proc/uptime) && echo ${temp%%.*})"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
if [ "${days}" -ne "0" ]
then
   echo -n "${days}d"
fi
echo -n "${hours}h${mins}m"
    
por Drew Chapin 09.11.2011 / 03:57
0

Isso seria suficiente:

test $(cut -d '.' -f1 /proc/uptime) -gt 300

Exemplo de script:

if test $(cut -d '.' -f1 /proc/uptime) -gt 300; then
  echo "booted more than 5 minutes ago"
else
  echo "too early"
fi
    
por VasyaNovikov 15.06.2018 / 23:24

Tags