我想要以下行为:如果我已经登录,现在是某个时间,程序尚未启动,请启动该程序。我该如何实现?
答案1
看看这个命令at
http://manpages.ubuntu.com/manpages/gutsy/man1/at.1posix.html
您可以在特定时间执行命令使用它在特定时间启动您的应用程序
答案2
假设这个应用程序是一个图形应用程序,需要连接到 X 显示器,我会编写一个脚本,让它休眠X几秒钟后运行应用程序,其中X是到达所需时间的秒数。然后通过启动应用程序运行此程序。
像这样:
#!/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
该应用程序应该在您登录时每天 16:30 到 16:31 之间运行。
答案3
我将编写一个脚本由 CRON 运行。
检查用户是否已登录:
who -a | grep fred
fred
您要检查的用户名在哪里。
ps -ef | grep appname
如果发现appname
正在运行,将会返回某些内容,以便您可以检查。
确保使用适当的用户凭据(root?)运行脚本。
例如这里有一个 bash 脚本片段,显示对来自的输出进行测试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
需要注意的一点是,我的编码方式grep
意味着它默认执行通配符搜索,因此grep jul
会找到julian
和july
等等。
答案4
另一个选项是使用计划任务,你可以指定很多事情 https://apps.ubuntu.com/cat/applications/gnome-schedule/ 在 apt://gnome-schedule 下载