Как запустить программу в назначенное время, если я вошел в систему?

Мне нужно следующее поведение: если я вошел в систему, и это определенное время, а программа еще не запущена, запустите программу. Как мне этого добиться?

4 ответа

Посмотрите на эту команду под названием at http://manpages.ubuntu.com/manpages/gutsy/man1/at.1posix.html вы можете выполнять команды в определенное время Используйте это для запуска вашего приложения в определенное время

Я бы написал скрипт для 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, так далее.

Предполагая, что это приложение является графическим приложением, для подключения которого требуется X-дисплей, я написал бы сценарий, который спит в течение X секунд, а затем запускает приложение, где X - количество секунд до желаемого времени. Затем запустите это через Startup Applications.

Что-то вроде этого:

#!/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 каждый день, когда вы вошли в систему.

Другим вариантом является использование запланированных задач, с его помощью вы можете указать множество вещей https://apps.ubuntu.com/cat/applications/gnome-schedule/ скачать его по адресу: apt://gnome-schedule

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