如果启动应用程序(或进程)无法自动启动,如何显示通知

如果启动应用程序(或进程)无法自动启动,如何显示通知

我添加了一个脚本来自动启动(使用LXSession 的默认应用程序)。后来,我把包含脚本的文件夹移走了。

结果,自动启动命令悄然失败。

如何启用有关失败的自动启动命令的警告消息?

答案1

以下解决方案并非专门针对 Lubuntu,仅用于应用程序从 GUI 自动启动有点不同,因为Lubuntu没有启动应用程序应用程序,例如 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

答案2

假定您的启动程序在 中/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

相关内容