我添加了一个脚本来自动启动(使用LXSession 的默认应用程序)。后来,我把包含脚本的文件夹移走了。
结果,自动启动命令悄然失败。
如何启用有关失败的自动启动命令的警告消息?
答案1
以下解决方案并非专门针对 Lubuntu,仅用于放应用程序从 GUI 自动启动有点不同,因为Lubuntu
没有启动应用程序应用程序,例如 Ubuntu。
检查脚本是否在登录后的一定时间限制内启动
使用下面的脚本,您可以检查脚本是否在登录后的一定时间限制内成功启动。如果启动不成功,将出现一条消息,指出哪些脚本未成功启动。您可以使用它在一个步骤中检查多个脚本或进程。
时间限制过后,发送消息,脚本终止
如何使用
- 将下面的脚本复制到一个空文件中,并将其保存
proc_check.py
为永恒的:) 地点。 - 在脚本的头部,设置需要关注的进程列表(脚本名称),并设置时间限制。
确保要检查的进程没有运行,然后使用以下命令测试运行脚本:
python3 /path/to/proc_check.py
时间限制过后应该发出警告。
如果一切正常,请将以下命令添加到启动应用程序中:
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