Como mostrar uma notificação se um aplicativo de inicialização (ou processo) não for iniciado automaticamente

4

Eu adicionei um script para iniciar automaticamente (usando aplicativos padrão para LXSession ). Mais tarde, mudei a pasta que contém o script.

Como resultado, o comando autostart falhou silenciosamente.

Como posso ativar mensagens de aviso sobre comandos de partida automática com falha?

    
por Mateusz Konieczny 28.04.2015 / 11:40

2 respostas

7

A solução abaixo não é especificamente para Lubuntu, apenas a maneira de definir um aplicativo para autoinicialização a partir da GUI é um pouco diferente, pois Lubuntu não possui os aplicativos de inicialização

Verifique se um script foi iniciado dentro de um determinado limite de tempo a partir do login

Com o script abaixo, você pode verificar se um script foi iniciado com sucesso, dentro de um determinado limite de tempo do login. Se a (s) inicialização (ões) estiver sem êxito , uma mensagem aparecerá, mencionando quais dos scripts não foram iniciados com sucesso. Você pode usá-lo para verificar vários scripts ou processos em uma única etapa.

Depois que o limite de tempo passou e enviou sua mensagem, o script termina

Como usar

  1. Copie o script abaixo em um arquivo vazio, salve-o como proc_check.py em um local permanente :).
  2. Na cabeça do script, defina a lista de processos (nomes de script) para ficar de olho e defina o limite de tempo.
  3. Certifique-se de que os processos (para verificar) não estejam em execução e teste-execute o script com o comando:

    python3 /path/to/proc_check.py
    

    Deve enviar um aviso após o limite de tempo.

  4. Se tudo funcionar bem, adicione o comando abaixo aos seus aplicativos de inicialização:

    python3 /path/to/proc_check.py
    

Nota:

Se você tem notify-send disponível ( sudo apt-get install libnotify-bin ), você também pode descomentar a última linha antes, para obter uma confirmação se tudo correu bem:

A vantagem disso é que você irá receber uma notificação de que tudo correu bem, ou um aviso, mencionando quais processos não foram iniciados com sucesso.
Você notará então se acidentalmente moveu este script. :)

O script

#!/usr/bin/env python3
import subprocess
import getpass
import time

#--- set the processes (script names) to check below
procs = ["pscript_2.py", "monkey.py"]
#--- set the time limit below (seconds)
wait = 30
#---

# define the user to fetch the current user's process list
user = getpass.getuser()
# create an (empty) list of succesful process startups
succeeded = []

def get():
    return subprocess.check_output(["ps", "-u", user, "ww"]).decode("utf-8")

t = 1
while t < wait:
    # add succesful processes to the "succeeded" list
    for p in [proc for proc in procs if proc in get()]:
        succeeded.append(p)
    time.sleep(1)
    t = t+1

# list the failures
fails = [p for p in procs if not succeeded.count(p) > 2]
# if there are any, send a message
if len(fails) > 0:
    subprocess.Popen(["zenity", "--info", "--text", "failed to run: "+(", ").join(fails)])
# if all was successfull, send a message; n.b. comment out the line if notify-send is not available
else:
    # subprocess.Popen(["notify-send", "All processes started succesfully"])
    pass
    
por Jacob Vlijm 28.04.2015 / 13:47
4

Assume-se que seus programas de inicialização estão em /home/<your_username>/.config/autostart/ .

E algo como isso no seu crontab:

awk -F'[= ]' '/^Exec/{print }' /home/<your_username>/.config/autostart/*.desktop | while IFS= read -r target; do [ ! -x "${target/\~/$HOME}" ] &&  ! type "${target/\~/$HOME}" &> /dev/null  && echo "Not executable: $target" | mail -s "Missing commands" <your_username>; done

Abra seu crontab com:

crontab -e

e adicione esta linha:

* */2 * * *       awk -F'[= ]' '/^Exec/{print }' /home/<your_username>/.config/autostart/*.desktop | while IFS= read -r target; do [ ! -x "$target" ] &&  ! type "$target" &> /dev/null  && echo "Not executable: $target" | mail -s "Missing commands" <your_username>; done

Isso verificará seus arquivos em .config/autostart/ a cada duas horas e enviará um e-mail, se houver algum problema.

Obrigado @terdon

    
por A.B. 28.04.2015 / 12:45