Вопрос или проблема
У меня есть следующий код в скрипте Bash, который получает текущую дату/время и устанавливает его по SSH на целевом компьютере:
ssh <user>@<target> "date --set '$(date)'"
Это работало хорошо с разными дистрибутивами Ubuntu, но недавно целевой компьютер изменился на другую версию Linux, и я получаю ошибку “неверная дата”.
Какой правильный способ сделать это, который должен работать для любой версии Linux?
Согласно информации здесь, следующий метод должен работать на любых системах, которые поддерживают GNU Core Utilities (что охватывает все распространенные дистрибутивы).
Обратите внимание, что --set
не используется при установке даты.
MY_DATE=$(date +%m%d%H%M%Y.%S)
ssh <user>@<target> "date '${MY_DATE}'"
Ответ или решение
Ваш вопрос о том, как установить дату и время на одном компьютере с другого через SSH, справедливо поднимает проблему совместимости с различными дистрибутивами Linux. Ваша первоначальная команда, использующая date --set '$(date)'
, может вызывать ошибку "invalid date" в некоторых системах, потому что флаг --set
не является обязательным в некоторых версиях утилиты date
.
Для того чтобы избежать подобных проблем и обеспечить стабильную работу вашего скрипта на всех распространённых дистрибутивах Linux, вы можете использовать следующий подход:
MY_DATE=$(date +%m%d%H%M%Y.%S)
ssh <user>@<target> "date '${MY_DATE}'"
Объяснение:
-
Форматирование даты: Строка
$(date +%m%d%H%M%Y.%S)
генерирует строку с текущей датой и временем в форматеMMDDhhmmYYYY.SS
, что позволяет избежать ошибок, связанных с различиями в форматах даты между дистрибутивами. -
SSH команда: Ваша команда SSH передаёт именно это значение в целевую систему без использования флага
--set
, который может оказаться не поддерживаемым.
Использование этого метода должно гарантировать, что команда работает на большинстве дистрибутивов Linux, так как формат будет понятен и корректен для систем, использующих GNU Core Utilities.
Дополнительные рекомендации:
- Убедитесь, что у вас есть необходимые привилегии для установки даты на удалённой машине, так как это обычно требует прав администратора.
- Также рекомендуется учитывать временные зоны. Если целевая и исходная машины находятся в разных временных зонах, проверьте их настройки времени, чтобы избежать рассинхронизации.
Эта информация позволит вам установить дату и время на удалённой машине без возникновения ошибок, связанных с форматом даты.