выбрать дату из строки и сравнить с текущей датой и распечатать другое поле из выбранной строки

Наше серверное развертывание использует LDAP, содержащий все идентификаторы пользователей и карты автоматического монтирования. Домашние каталоги пользователей монтируются через NFS, и пользователи обычно создают cronjobs @reboot с исполняемым кодом в своих домашних каталогах. Мы также используем sssd для кеша. Излишне говорить, что мы очень полагаемся на возможность обеспечить детерминированный порядок загрузки для работы этой конфигурации. Мы разработали очень краткую конфигурацию systemd и обнаружили неясный нюанс между параметрами раздела «хочу» и «требуется».

Если у вас произошел сбой службы во время загрузки, и есть другая служба, зависящая от «требуется» от этой службы с параметром «restart=always», установленным в качестве параметра службы, эта зависимая служба не будет перезапущена. Однако, если у вас есть вариант «хочет», зависимая служба перезапустится, как и ожидалось.

0
04.08.2020, 10:38
1 ответ

Вы хотите использовать первое поле, но cutотключите его перед отправкой на while.

Почему бы просто не использовать readдля разделения полей:

while read name date; do
   ...
    time_line=$(date -u -d "$date" +"%s")
   ...
    echo "$name"
done < /tmp/OutPrint

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

  • Бесполезное использование cat.

  • Почему вы сохраняете промежуточную $nowпеременную для использования с dateвместо того, чтобы использовать dateнапрямую:

    time_now=$(date -u +"%s")
    
  • Бесполезное использование echoдля сохранения вывода команды в переменную:

    difference=$((time_now - time_line))
    
  • Вы также можете использовать его напрямую в своем операторе if вместо того, чтобы вообще сохранять в переменную:

    if [ $((time_now - time_line)) -ge 2592000 ]
    
1
18.03.2021, 23:15

Теги

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