如果我已登录,如何在预定的时间启动程序?

如果我已登录,如何在预定的时间启动程序?

我想要以下行为:如果我已经登录,现在是某个时间,程序尚未启动,请启动该程序。我该如何实现?

答案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会找到julianjuly等等。

答案4

另一个选项是使用计划任务,你可以指定很多事情 https://apps.ubuntu.com/cat/applications/gnome-schedule/ 在 apt://gnome-schedule 下载

相关内容