В Linux есть переменная, которая показывает мне, когда машина была включена в последний раз? - PullRequest
2 голосов
/ 16 ноября 2010

Я хочу создать скрипт, который, зная, что мой компьютер включен как минимум на 7 часов, что-то делает.

Возможно ли это? Существует ли системная переменная или что-то в этом роде, показывающее мне, когда машина была включена в последний раз?

Ответы [ 7 ]

3 голосов
/ 16 ноября 2010

Следующая команда помещена в /etc/rc.local:

echo 'touch /tmp/test' | at -t $(date -d "+7 hours" +%m%d%H%M)

создаст задание, которое будет запускать touch /tmp/test через семь часов.

Для защиты от частых перезагрузок и предотвращения добавления нескольких заданий вы можете использовать одну очередь at исключительно для заданий этого типа (например, очередь c). Добавление -q c в список параметров at поместит задание в очередь c. Перед добавлением нового задания вы можете удалить все задания из очереди c:

for job in $(atq -q c | sed 's/[ \t].*//'); do atrm $job; done
3 голосов
/ 16 ноября 2010

Вы можете проанализировать вывод uptime Полагаю.

2 голосов
/ 16 ноября 2010

Как Павел и Ткала указывают ниже, это не надежное решение.Смотрите их комментарии!

Команда uptime показывает, как долго работает система.

Чтобы выполнить свою задачу, вы можете создать скрипт, который сначала выполняет sleep 25200 (25200 секунд = 7 часов), а затем делает что-то полезное.Запустите этот скрипт при запуске, например, добавив его в /etc/rc.local.Это лучшая идея, чем опрос команды uptime, чтобы узнать, прослужила ли машина 7 часов (что сравнимо с тем, что ребенок на заднем сиденье машины спрашивает: «Мы уже здесь?»)

1 голос
/ 16 ноября 2010

Добавьте в свой crontab следующее:

@reboot sleep 7h; /path/to/job

Либо / etc / crontab, /etc/cron.d/, либо ваш пользователь crontab, в зависимости от того, хотите ли вы запустить его от имени пользователя root или пользователя - не забудьте поставить «root» после «@reboot» "если вы положите его в / etc / crontab или cron.d

Преимущество этого заключается в том, что если вы перезагружаетесь несколько раз, задания закрываются при выключении, поэтому вы не получите кучу из них, если вы перезагрузитесь несколько раз в течение 7 часов. Спецификация времени «@reboot» запускает задание, которое запускается один раз при перезагрузке системы. "спать 7 часов;" ждет 7 часов перед запуском "/path/to/job".

1 голос
/ 16 ноября 2010
$ cut -d ' ' -f 1 </proc/uptime

Это даст вам текущее время работы системы в секундах в формате с плавающей запятой.

В bash-скрипте можно использовать следующее:

if [[ "$(cut -d . -f 1 </proc/uptime)" -gt "$(($HOURS * 3600))" ]]; then
...
fi
1 голос
/ 16 ноября 2010

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

1 голос
/ 16 ноября 2010

Просто дождитесь времени безотказной работы, равного семи часам.

http://linux.die.net/man/1/uptime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...