У меня есть скрипт bash, который запускается каждую минуту cron. Он проверяет, работает ли необходимая программа и запускает ее, если это не так. Иногда он запускается до того, как пользователь фактически выполнит аутологию. Я хочу, чтобы это не происходило.
Я думаю, что мне хотелось бы сделать чек в проверке работоспособности компьютера и посмотреть, было ли это на 5 минут, чтобы автозапуск имел возможность закончить перед программой начинается. Я довольно новичок в bash, и синтаксический анализ того, что я получаю от «uptime» до того места, где я мог использовать его для сравнения, кажется мне недоступным.
Может ли кто-нибудь помочь? Возможно, есть лучшее решение. Я застрял.
Сценарий 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/
Поскольку мне пришлось резко изменить сценарий из оригинала, я решил опубликовать это как отдельный ответ. Я не уверен, почему код выше не работает. Прошу прощения, я должен был протестировать его, прежде чем публиковать его. Я подтвердил, что приведенный ниже код действительно работает.
#!/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
Попробуйте это
#!/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"