Я пытаюсь написать сценарий bash, который сообщит мне "время отсрочки блока" по умолчанию для данного раздела в предсказуемой единице. Ближайшее, что я нашел до сих пор, - использовать repquota и анализировать вывод, но это непоследовательно. Иногда он сообщает дни, как вы видите ниже «7 дней», как вы можете видеть удар в третьей строке.
[root@hostname]# repquota -g -p /
*** Report for group quotas on device /dev/mapper/vg_in1-lv_root
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 2135928 0 0 0 59727 0 0 0
bin -- 480 0 0 0 28 0 0 0
tty -- 24 0 0 0 2 0 0 0
[...]
Для более коротких периодов отображается как «4:10», что означает 4 часа 10 минут. Для значений <30 секунд он сообщает 00:00, а от 30 секунд до 1 минуты - 00:01.
Как я могу получить фактическое значение параметра «Время отсрочки блока», не делая его более «читабельным», чтобы программа могла его надежно проанализировать?
Спасибо!
У нас есть аналогичная проблема с отчетами о квотах GPFS. Самым простым решением было бы иметь регулярное выражение, которое позволит вам получить все, что есть в любой форме, с которой вы ожидаете столкнуться, а затем проанализировать это на следующем шаге. Например в Python
#!/usr/bin/env python
import re
import sys
GRACE_REGEX = re.compile(r"Block grace time: (?P<days>\d+)\s*days?|(?P<hours>\d+):(?P<minutes>\d+)")
for line in sys.stdin.readlines():
grace = GRACE_REGEX.search(line)
if not grace:
continue
grace_groups = grace.groupdict()
if grace_groups.get('days', None):
print "Found days: %d or in seconds: %d" % (
int(grace_groups['days']),
int(grace_groups['days']) * 86400)
if grace_groups.get('hours', None):
print "Found hours: %d and minutes: %d or in seconds: %d" % (
int(grace_groups['hours']),
int(grace_groups['minutes']),
int(grace_groups['hours']) * 3600 + int(grace_groups['minutes']) * 60)
Учитывая примерные строки
Block grace time: 7days; Inode grace time: 7days
Block grace time: 4:10; Inode grace time: 7days
Вы получите следующий результат:
Found days: 7 or in seconds: 604800
Found hours: 4 and minutes: 10 or in seconds: 15000