Как выполнить синтаксический анализ прошедшего времени в секундах в linux

Как я могу отключить автоматическое монтирование, и чтобы оно пыталось монтировать только тогда, когда я

С помощью dconf-editor отключить автоматическое монтирование, как описано здесь: Как отключить автомонтирование в настройках nautilus.

В качестве альтернативы выполните следующую команду:

gsettings set org.gnome.desktop.media-handling automount false
0
25.04.2018, 14:16
2 ответа

Мы не можем зависеть от параметров дней и часов, потому что через 7 дней мы получим параметр недели, а через 30 дней мы получим параметр месяца.

Поэтому лучше рассчитывать время начала службы.

#!/bin/bash
SERVICE=cassandra
SERVICE_START_TIME=`systemctl status $SERVICE | awk '/Active: active/{print $6" "$7}'`
SERVICE_UP_TIME=$(($(date +%s) - $(date -d "$SERVICE_START_TIME" +%s)))
echo "$SERVICE uptime : $SERVICE_UP_TIME"

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

systemctl status cassandra | awk -F ';' '/Active: active/{print $2}' |  sed -e 's/s ago/ 1/; s/s//g; s/min/ 60/; s/h ago/ 3600/; s/day/86400/; s/week/606800/; s/month/2592000/; s/ago//' | awk '{a=$1*$2;b=$3*$4;c=$a+$b;print a" sec"}'
1
28.01.2020, 02:32

Вы можете использовать команду dateдля анализа этих значений следующим образом:

        adjusted_val="$(printf '%s' "$val" | sed 's/h/hour/')"
        result="$(date -d "$(date -d @0) + $adjusted_val" +%s)"

Любопытно, что dateне распознаетh(и дажеhr)как сокращение от «час», поэтому в качестве первого шага мы заменяем hв строке на hour. Затем находим «эпоху времени» — дата/время, с которого отсчитывается дата/время Unix — путем расширения@0(Unix time 0 )в виде строки. (Этот хорошо -известен и задокументирован как «1 января 1970 00 :00 :00 GMT», так что мы могли бы просто жестко -закодировать это значение. )Затем мы добавляем вашу строку :, например (1 января )+ 3 дня (s )— это 4 января. Затем мы используем +%s, чтобы отобразить эту дату/время как числовую дату/время Unix, что является количеством секунд после эпохи. Это соответствует значению интервала (дельта )вашей строки.

Если вы хотите сделать много значений одновременно, вы можете оптимизировать это, вычислив эпоху только один раз:

#!/bin/sh
epoch="$(date -d @0)"
for val
do
        adjusted_val="$(printf '%s' "$val" | sed 's/h/hour/')"
        if result="$(date -d "$epoch + $adjusted_val" +%s)"
        then
                printf '%-12s -> %6d\n' "$val" "$result"
        else
                printf '%-12s <- error\n' "$val"
        fi
done

результаты:

$./myscript '3 day 18h' '3 day' '3h 15min' '3h' '15min 10sec' '15min ' \
                                                       '10sec' 'a moment' '3 weeks'
3 day 18h    -> 324000
3 day        -> 259200
3h 15min     ->  11700
3h           ->  10800
15min 10sec  ->    910
15min        ->    900
10sec        ->     10
date: invalid date ‘Wed, Dec 31, 1969  7:00:00 PM + a moment’
a moment     <- error
3 weeks      -> 1814400

Обратите внимание, что date -dможет обрабатывать слово «месяц». Если есть вероятность, что вы можете получить значения, содержащие это слово, вам нужно сделать команду sedумнее, так что буква "ч" в слове "месяц" не меняется.

Но если ты хочешь справиться с месяцами, Вы должны хорошенько подумать о том, что такое «месяц». Например, я пишу это 12 апреля 2020 года. Через месяц будет 12 мая, то есть через 30 дней. Месяц назад было 12 марта — это было 31 день назад. Два месяца назад было 12 февраля, то есть 60 (31+29 )дней назад. Но подождите — в не -високосных годах в феврале всего 28 дней, так что между 12 февраля и 12 апреля всего 59 дней. И еще :в Соединенных Штатах (как минимум ), 12 февраля — стандартное время, а 12 марта — летнее время. так (в не -високосных годах )полдень 12 февраля и полдень 12 марта всего 27 дней и 23 часа друг от друга. Все сложно.

2
28.01.2020, 02:32

Теги

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