Нужна помощь с проверкой bash, если время работы компьютера превышает 5 минут

У меня есть скрипт bash, который запускается на cron каждую минуту. Он проверяет, запущена ли необходимая программа, и запускает ее, если это не так. Изредка он запускается до того, как пользователь действительно авторизуется. Я хочу предотвратить это.

То, что я хотел бы сделать, - это проверить проверку работоспособности компьютера и посмотреть, было ли оно включено в течение 5 минут, чтобы автоматический вход мог завершиться до того, как программа получит началось. Я довольно плохо знаком с bash и анализирую то, что я получаю от «uptime» до того места, где я мог бы использовать его для сравнения, кажется мне недоступным.

Кто-нибудь может помочь? Возможно, есть лучшее решение. Я застрял.

7
задан 9 November 2011 в 06:47

4 ответа

Работа bash-скрипта / cron - неправильное решение проблемы, которую вы пытаетесь решить. На самом деле, отметьте, что - два задания bash-скриптов / cron являются неправильным решением вашей проблемы. ;)

Проблема, которую вы пытаетесь решить, заключается в следующем: «убедитесь, что задача запускается после входа пользователя в систему, и убедитесь, что она продолжает работать». Это работа для выскочки.

Следующее должно делать то, что вы хотите, и оно входит в / etc / init /. Назовите файл как-то так: user-session-job.conf.

description "Keep my very important program running"

start on desktop-session-start
stop on desktop-shutdown

respawn

script
    /path/to/my/very/important/program
end script

Пожалуйста, ознакомьтесь с новой кулинарной книгой для получения дополнительной помощи: http://upstart.ubuntu.com/cookbook/

0
ответ дан 9 November 2011 в 06:47

Так как мне пришлось резко изменить сценарий по сравнению с оригиналом, я решил опубликовать это как отдельный ответ. Я не уверен, почему код выше не работает. Я прошу прощения, я должен был проверить это перед публикацией. Однако я убедился, что приведенный ниже код действительно работает.

#!/bin/bash

upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')"
upMins=$((${upSeconds} / 60))

if [ "${upMins}" -gt "5" ]
then
    echo "Up for ${upMins} minutes"
else
    echo "Up five minutes or less"
fi
0
ответ дан 9 November 2011 в 06:47

Этого будет достаточно:

test $(cut -d '.' -f1 /proc/uptime) -gt 300

Пример сценария:

if test $(cut -d '.' -f1 /proc/uptime) -gt 300; then
  echo "booted more than 5 minutes ago"
else
  echo "too early"
fi
0
ответ дан 9 November 2011 в 06:47

Попробуйте это

#!/bin/bash
#
#   upt - show just the system uptime, days, hours, and minutes

let upSeconds="$(cat /proc/uptime) && echo ${temp%%.*})"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
if [ "${days}" -ne "0" ]
then
   echo -n "${days}d"
fi
echo -n "${hours}h${mins}m"
0
ответ дан 9 November 2011 в 06:47

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

Похожие вопросы: