Если бы решение IP-KVM находится в Вашем бюджете, я пошел бы для этого, особенно если у Вас есть способность удаленно инициировать циклы включения и выключения питания и т.п..
Я могу рекомендовать получить тип, который не использует густых кабелей KVM, но вместо этого использует CAT-5 и т.п.? Большими кабелями является ЛАВАШ, чтобы работать и иметь дело с, где, поскольку мы все в значительной степени привыкли к CAT-5 к настоящему времени.
Если Вы идете тем путем, сохраните себя нормальными путем цветового кодирования на кабели так, чтобы строки KVM не напоминали сетевые соединения.
Последовательные кабели действительно работают, но те, которых я использовал, восприимчивы к интерференции, плюс BIOS должен поддерживать перенаправление-к-последовательному (многие делают теперь, но всегда существует изолированная часть).
Вот решение ( Linux, НЕ Unix ):
date --set="2011-12-07 01:20:15.962" && date --rfc-3339=ns
Обратите внимание на задержку:
CURTIME=`date --rfc-3339=ns`
date --set="${CURTIME}"
NEWTIME=`date --rfc-3339=ns`
echo ${CURTIME}
echo ${NEWTIME}
2011-12-07 01:48:54.687216122+00:00
2011-12-07 01:48:54.720541318+00:00
Как вы заметите, целые миллисекунды задержки представлены. Это связано со временем, которое требуется для инициализации памяти и загрузки двоичного файла даты
. Это верно для всех оболочек и exec
для insert-high-level-language-here
Однако, если вам просто нужно субсекундное разрешение в диапазоне 10-х долей секунды, это будет хорошо во многих случаях достаточно.
Если ваша цель - установить время с субсекундными интервалами, то дата кажется неправильной командой, если я правильно читаю исходный текст.
Предполагая, что вы используете coreutils версии date, то мне кажется, что строка when.tv_nsec = 0
устанавливает наносекундную часть переменной when
, которая является структурой времени, равной нулю. Даже если бы вы могли убедить date принять более точное значение, мне это кажется бессмысленным.
# time.h
struct timespec
{
__time_t tv_sec; /* Seconds. */
long int tv_nsec; /* Nanoseconds. */
};
# date.c
struct timespec when;
# ...
valid_date = posixtime (&when.tv_sec,
datestr,
(PDS_TRAILING_YEAR
| PDS_CENTURY | PDS_SECONDS));
when.tv_nsec = 0; /* FIXME: posixtime should set this. */
# ...
/* Set the system clock to the specified date, then regardless of
the success of that operation, format and print that date. */
if (settime (&when) != 0)
{
error (0, errno, _("cannot set date"));
ok = false;
}
Существует лучший метод, который не требует преобразования временной метки в удобочитаемый формат даты, как в принятом ответе. Вы были очень близки со своим первоначальным предложением:
date +"%s.%N" -s "1323217126.085882000"
При указании временных меток вам нужно ставить префикс '@', а не цитировать их:
date +"%s.%N" -s @1323217126.085882000
Теперь это будет правильно устанавливать текущее время Linux в секундах с точностью до миллисекунды.