Как показать уведомление, если автозагрузка приложения (или процесса) не запустилась автоматически

Я добавил скрипт для автозапуска (используя приложения по умолчанию для LXSession). Позже я переместил папку, содержащую скрипт.

В результате команда автозапуска молча провалилась.

Как включить предупреждающие сообщения о неудачных командах автозапуска?

2 ответа

Приведенное ниже решение не предназначено специально для Lubuntu, только способ настроить приложение на автоматический запуск из графического интерфейса немного отличается, так как Lubuntu не имеет приложения Startup Applications, как Ubuntu.

Проверьте, был ли скрипт запущен в течение определенного времени после входа в систему

С помощью приведенного ниже сценария вы можете проверить, успешно ли запущен сценарий, в течение определенного периода времени после входа в систему. Если запуск (ы) был неудачным, появится сообщение с указанием, какой из сценариев не запустился успешно. Вы можете использовать его для проверки нескольких сценариев или процессов за один шаг.

введите описание здесь

По истечении срока и отправки сообщения сценарий завершается

Как пользоваться

  1. Скопируйте приведенный ниже скрипт в пустой файл и сохраните его как proc_check.py в постоянном:) месте.
  2. В заголовке сценария установите список процессов (имен сценариев), за которыми следует следить, и установите ограничение по времени.
  3. Убедитесь, что процессы (для проверки) не запущены, и протестируйте скрипт с помощью команды:

    python3 /path/to/proc_check.py
    

    Он должен отправить предупреждение после истечения срока.

  4. Если все работает нормально, добавьте приведенную ниже команду в свои автозагрузки:

    python3 /path/to/proc_check.py
    

Замечания:

Если у вас есть notify-send имеется в наличии (sudo apt-get install libnotify-bin), вы также можете раскомментировать предыдущую строку, чтобы получить подтверждение, если все прошло хорошо:

введите описание здесь

Преимущество этого заключается в том, что вы получите либо уведомление о том, что все прошло хорошо, либо предупреждение о том, какой из процессов не запустился успешно.
Тогда вы заметите, если вы случайно переместили этот скрипт.:)

Сценарий

#!/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

Предполагается, что ваши программы запуска находятся в /home/<your_username>/.config/autostart/,

И чем-то вроде этого в вашем crontab:

awk -F'[= ]' '/^Exec/{print $2}' /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

Откройте ваш crontab с помощью:

crontab -e

и добавьте эту строку:

* */2 * * *       awk -F'[= ]' '/^Exec/{print $2}' /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

Это проверит ваши файлы в .config/autostart/ каждые два часа и отправьте письмо, если есть проблемы.

Спасибо @terdon

Другие вопросы по тегам