Como iniciar um programa em um horário agendado se eu estiver logado?

0

Eu quero o seguinte comportamento: if Estou logado, e é um certo tempo, e o programa ainda não foi iniciado, inicie o programa. Como posso conseguir isso?

    
por jaybee 05.07.2012 / 07:17

4 respostas

2

Veja este comando chamado at link você pode executar comandos em um horário específico Use isso para iniciar seu aplicativo em um horário específico

    
por user49557 05.07.2012 / 07:30
1

Supondo que este aplicativo é um aplicativo gráfico que requer um X display para conectar, eu escreveria um script que dorme por X segundos e então executaria o aplicativo, onde X é o número de segundos até o tempo desejado. Em seguida, execute isso por meio de aplicativos de inicialização.

Algo parecido com isto:

#!/usr/bin/env bash

# run at 16:30
h=16 m=30

while true; do 
    # grab current hour and minute
    read now_h now_m < <(date "+%H %M")

    # calculate approximate number of seconds until 16:30 using modular 
    # arithmetics
    (( s = (1440 + (10#$h*60 + 10#$m) - (10#$now_h*60 + 10#$now_m)) % 1440 * 60 ))

    printf "Sleeping %d seconds\n" "$s"
    sleep "$s" && theapp
done

Isso deve executar o aplicativo entre 16:30 e 16:31 todos os dias enquanto você estiver conectado.

    
por geirha 05.07.2012 / 11:31
1

Eu escreveria um script para ser executado pelo CRON.

Para verificar se um usuário está logado:

who -a | grep fred

Onde fred é o nome do usuário que você deseja verificar.

ps -ef | grep appname

Irá retornar algo se encontrar appname em execução para que você possa verificar isso.

Certifique-se de executar o script com as credenciais de usuário apropriadas (root?)

Então, por exemplo, aqui está um pequeno trecho de script que mostra o teste da saída do cmd | grep .... :

#!/bin/bash

if who -a | grep fred > /dev/null; then
   echo "Fred is logged in"
   if ps -ef | grep appname > /dev/null; then
      echo "User is logged in and app is running"
   else
      echo "User is logged in BUT appname is not running"
      # ---- Do stuff here ----
   fi
else
   echo "Fred is NOT logged in"
fi

Uma coisa a notar é que a maneira como codifiquei grep significa que ele faz uma pesquisa curinga por padrão, então grep jul encontraria julian e july , etc.

    
por Julian Knight 05.07.2012 / 12:17
0

Outra opção é usar tarefas agendadas com ele, você pode especificar muitas coisas link baixá-lo no apt: // gnome-schedule

    
por user49557 05.07.2012 / 12:24