сервер ubuntu 20.04 с почтовым сервером kerio connect, обновление mailserver.cfg с помощью sed

Вопрос или проблема

пытаюсь обновить файл mailserver.cfg с текущим временем unix, чтобы он правильно синхронизировался со вторым резервным сервером.

строка, которую я хочу изменить, выглядит так:
<variable name="UpdateLastCheck">1606252085</variable> число 1606252085

я создал небольшой скрипт, который устанавливает корректное unix время в файл, чтобы оно было таким же в файле mailserver.cfg.
Когда я хочу сделать резервную копию файла, он читает время из time.cfg и должен быть таким же в файле mailserver.cfg, после резервного копирования новое время должно быть записано в файл mailserver.cfg.

скрипт, который у меня есть на данный момент

#!/bin/bash

echo "Создано мной, обновление времени"

timestamp=$(date +%s)
timestold=$(cat /home/timestamp.cfg)

echo "Старое время = $timestold"

sed -i -e '/UpdateLastCheck/s/$timestold/$timestamp/' mailserver.cfg && $timestamp > timestamp.cfg

echo "Новое время = $timestamp" 

Есть ли предложения, как изменить unix-время в этой строке?

Ответ или решение

Для решения вашей задачи по обновлению временной метки Unix во файлe mailserver.cfg на Ubuntu 20.04 с использованием Kerio Connect Mailserver, необходимо внести исправления в использованный вами скрипт. Давайте разберем текущие ошибки и предложим оптимальное решение.

Теория:
Ваш текущий скрипт нацелен на замену временной метки Unix во файлe mailserver.cfg. Это делается с помощью команды sed, которая требуется для поиска и замены старой временной метки на новую. Однако в текущей версии скрипта отсутствуют ключевые моменты, которые могут привести к его некорректной работе. Основной проблемой является использование переменных $timestold и $timestamp в команде sed, которые не обрабатываются в корректной форме.

Пример:
Для выполнения замены с помощью sed, необходимо применить замену с использованием слэш-символов (/), а также регулярных выражений, которые требуют правильного экранирования символов. В вашем сценарии нужно учесть, что переменные Bash не интерполируются внутри одинарных кавычек. Поэтому использование одинарных кавычек в выражении sed приводит к тому, что заменяются именно слова $timestold и $timestamp, а не их значимые значения.

Применение:
Для более эффективного и правильного выполнения замены, ваш скрипт должен выглядеть следующим образом:

#!/bin/bash

echo "Created by Me, timeupdate"

# Получаем текущий Unix-временной штамп
timestamp=$(date +%s)

# Читаем старый временной штамп из файла
timestold=$(cat /home/timestamp.cfg)

echo "Old time = $timestold"

# Используем sed для замены старого Unix-времени на новое во всем файле
sed -i -e "s/<variable name=\"UpdateLastCheck\">$timestold<\/variable>/<variable name=\"UpdateLastCheck\">$timestamp<\/variable>/g" mailserver.cfg

# Записываем новое время в timestamp.cfg
echo $timestamp > /home/timestamp.cfg

echo "New Time = $timestamp"

Объяснение улучшений:

  1. Правильное экранирование: Мы экранировали символы < и > в выражении замены sed, чтобы корректно обновить XML-синтаксис в mailserver.cfg.

  2. Интерполяция переменных: Убедитесь, что выражение sed заключено в двойные кавычки, чтобы ядро оболочки Bash могло интерполировать значения переменных $timestold и $timestamp.

  3. Использование правильного пути: Убедитесь, что ваш скрипт имеет правильные пути к файлам mailserver.cfg и timestamp.cfg. В приведенном скрипте предполагается, что первый файл находится в текущем рабочем каталоге скрипта, а timestamp.cfg – в указанном /home.

  4. Обработка ошибок: Хотя вышеуказанный скрипт является основным решением, всегда желательно включать дополнительные проверки на случай ошибок. Например, проверьте, существует ли файл timestamp.cfg перед его чтением, и убедитесь, что mailserver.cfg не только существует, но и доступен для записи.

  5. Предварительное резервное копирование: Прежде чем изменять файлы конфигурации, убедитесь, что ваши данные в безопасности. Создайте резервные копии важных файлов, чтобы избежать возможной потери данных при неверной записи.

Простое следование этим шагам должно привести к успешной и безопасной замене временной метки в вашей конфигурации сервера. Поддержание времени в соответствии с резервным сервером является необходимым шагом для обеспечения стабильности и надежности системы.

Оцените материал
Добавить комментарий

Капча загружается...