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

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

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

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

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

3 ответа

Сценарий 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/

14
ответ дан 25 May 2018 в 17:03
  • 1
    Благодаря тонну. Есть так много «в основном правых». способы сделать что-то в Linux. Это потрясающе, когда вы находите " право " один. – rabid.sloth 9 November 2011 в 21:07

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

#!/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
3
ответ дан 25 May 2018 в 17:03
  • 1
    Благодаря! Это относительно похоже на то, с чем я пошел! Я отправлю свое решение в ближайшее время! – rabid.sloth 14 November 2011 в 21:34

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

#!/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"
1
ответ дан 25 May 2018 в 17:03
  • 1
    Я получаю эту ошибку: [edit, sorry неправильная ссылка, исправлена] pastebin.com/qVUXpeBC – Matt 9 November 2011 в 09:07
  • 2
    Разум, включая объяснение сценария? – N.N. 10 November 2011 в 01:06
  • 3
    этот скрипт был скопирован & amp; вставленный из ссылки чуть выше кода. Существует пояснение кода на этой странице. – Drew Chapin 10 November 2011 в 07:09

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

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