Синхронизировать дату и время на вычислительных узлах

[117640]используя вычислительный кластер?

Так как вы спрашиваете о [118092]qsub[118093], я предполагаю, что вы используете [118094]GridEngine[118095] или какой-нибудь [118096]компьютерный кластерный продукт[118097].

qsub

  1. Когда вы запускаете команду [118098]qsub script_name.sh[118099], вы сообщаете головному узлу кластера, что вы хотите отправить скрипт для запуска на этом сервере. Таким образом, этот сервер должен иметь доступ к той же файловой системе, что и скрипт. Например, если ваш скрипт живет здесь, [118100]/home/myusername/script_name.sh[118101], этот файл должен быть доступен как на компьютере, на котором вы выполняете команду [118102]qsub[118103], так и на любом узле в вашем кластере, где вы собираетесь использовать [118104]имя_название скрипта. Когда вы запускаете скрипт, [118106]./script_name.sh[118107] вы ничего не запускаете в кластере. Вы выполняете этот сценарий локально на вашей системе. Если вы использовали команду для получения оболочки на кластере, [118108]qsh[118109], то вы выполняете эту команду на любом узле, на котором узел планировщика кластера решил дать вам оболочку.
  2. Разрешения
  3. Всякий раз, когда вы создаете сценарий и собираетесь его выполнять, вы должны сообщить системе о своих намерениях, изменив разрешения сценария таким образом, чтобы они отражали, что файл является исполняемым. Иначе файл не является сценарием, а просто текстовым файлом.
  4. Разрешения на файлы выглядят так:

какой-то сценарий

не исполняемый

исполняемый

#!/bin/bash
/usr/bin/alltray /usr/bin/thunderbird &
sleep 5m
killall thunderbird-bin

1
29.07.2015, 02:34
2 ответа

Предполагая, что вы запускаете SSH на головном узле, вы можете просто получить текущее время с него, используя команду date через SSH.

ssh user@host date

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

На подчиненных узлах вы можете установить текущее время, используя полученное значение, используя следующую команду как корень :

date --set=STRING

где СТРОКА - строковое значение, полученное от головного узла. . Это можно объединить в одну команду с помощью подстановки команд

date --set="$(ssh user@host date)"

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

/etc/init.d/ntpd stop

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

3
27.01.2020, 23:20

Если у вас есть root-доступ к узлам, то для настройки синхронизация времени. Наиболее часто используемым инструментом для этого является ntpd , доступный во всех, кроме самых специализированных дистрибутивов Linux (а также в других системах Unix). Ntpd периодически отправляет запросы по сети для получения текущего времени, измеряет отклонение локальных часов и настраивает локальные часы, чтобы компенсировать их перекос. Вы можете добиться большей точности, чем миллисекунды, по локальной сети.

Для достижения наилучших результатов выберите один или несколько узлов в качестве серверов, например головной узел (ы). Установите пакет сервера NTP (например, ntp в Debian / Ubuntu / Mint, а также в Fedora / RHEL / CentOS) и настройте серверы как ваши головные узлы, а также некоторые Интернет-серверы. В конфигурационном файле / etc / ntp.conf , у вас должно получиться что-то вроде

server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
server 3.fedora.pool.ntp.org
server head1.mycluster.internal.example.com
server head2.mycluster.internal.example.com

(оставьте строки, заданные вашим дистрибутивом, и добавьте свои). Если на головных узлах есть строка restrict , убедитесь, что она разрешает IP-адреса всех узлов. На других узлах вы можете ограничить 127.0.0.1 .

Перед настройкой NTP установите часы примерно на правильное время. Ntpd не будет синхронизировать время, если оно превышает 20 минут (предполагается, что вы неправильно установили часовой пояс или что-то не так с часами или сетью). Поэтому сначала установите часы вручную, например сначала установите правильную дату и время на локальном компьютере, затем вы можете использовать

ssh somenode "date -d $(date +%m%d%H%M%Y.%S)"

, чтобы установить часы somenode на несколько десятков секунд ниже локальных часов. Как только вы это сделаете, установите ntp или, если он уже установлен, перезапустите демон с помощью service ntpd restart или любым другим способом, который использует ваш дистрибутив.

1
27.01.2020, 23:20

Теги

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