Изменить значения конфигурации в определенное время

Я только что получил сообщение о том, что мне нужно изменить значение конфигурации в 2009-09-01 (новые налоги). Наш обычный подход для этого - проснуться в 2009-08-31 в 23:59, а затем просто изменить значение вручную. Что не является большой проблемой, так как это не часто случается. Но это заставляет меня задуматься, как другие люди решают подобные проблемы.

Так! Как вы справляетесь с конкретными изменениями конфигурации даты?

(Мы работаем в asp.net, но я не думаю, что это должно зависеть от языка)

бром
Карл Бергквист

9 ответов

Решение

Я обычно храню такие данные в таблице базы данных, например

Key,  Value,  EffectiveFrom,  EffectiveTo
-----------------------------------------
VAT,    15.0,      20081201,     20091231
VAT,    17.5,      20100101,         NULL

Я бы тогда использовал EffectiveFrom а также EffectiveTo даты, чтобы выбрать значение, которое действует в данный момент. Если ставка открыта, то значение может быть равно NULL или 99991231.

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

В linux есть командаat"для пакетного исполнения.
Увидеть "man at"для деталей.

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

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

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

Это пример для Linux-бокса, но я думаю, вы поняли смысл и можете сделать это на Windows-боксе.

Автор сценария:

cp /path/to/old/config /path/to/backup/dir/config.timestamp
cp /path/to/new/config

if(/path/to/new/config exsits) {
 sendSuccessEmail();
} else {
 sendPanicTextAlert();
}

хрон:

59 23 31 8 *  /path/to/script.sh

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

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

В нашем случае источник предоставил веб-сервис (фактически, стороннюю), который вернет измененные данные конфигурации. И на нашем сервере запущена служба Windows, которая продолжает опрос веб-службы и обновит файл конфигурации, если будут какие-либо изменения.

это прекрасно работает в нашем случае..

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

Это полностью зависит от ситуации и технологии.

Идея pjp хороша, если вы получаете свою конфигурацию из базы данных или в качестве метаданных, чтобы определить допустимое время для целых наборов / файлов конфигурации.

Другой может быть: просто подготовьте новый файл конфигурации с новыми записями и меняйте их в полночь (возможно, с перезапуском службы / программы) . Поменять их можно было бы с помощью at (как дано bei Neeraj) ...

Если проблема с синхронизацией, вы должны обработать изменение или, по крайней мере, время изменения на работающем сервере (чтобы избежать проблем с синхронизацией) .

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

Если вы не можете изменить текущие системы и вам нужно поменять конфигурационные файлы, у вас также есть два варианта:

  1. Используйте запланированное задание, чтобы запустить пакетное задание или даже сценарий VBScript или PowerShell (что когда-либо вам будет удобно). Убедитесь, что вы установили правильные учетные данные, чтобы иметь возможность делать это в середине ночи, и вы также можете добавить некоторые проверки и смягчения в этом подходе.
  2. Напишите службу Windows, которая сделает это за вас. Здесь у вас есть все, что вам нужно. Кодируйте его, чтобы делать все, что ему нужно, делать все необходимые проверки (чтобы вы могли спать, вместо того, чтобы убедиться, что это действительно работает) и т. Д., И т. Д. В таком случае ваша служба даже позаботится об аспекте планирования, и все будет будь хорошим. Здесь вы можете использовать объект xml DOM и xPath и не заменять файл, а просто обновлять определенные записи по мере необходимости.

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

Если я не могу сделать что-то вроде решения pjp, я бы использовал запланированное задание или задание сервера, чтобы автоматически обновить его в нужное время. Но... я, вероятно, все еще не сплю, проверяя, что это сработало

Я видел гибридный подход. Вместо фактического изменения модели данных для включения EffectiveDate/EndDate или изменения значений вручную самостоятельно, запланируйте сценарий для автоматического изменения значений. Кроме того, убедитесь, что у вас есть надежный план тестирования, который подтвердит все изменения.

Однако этот тип ручных изменений может оказать существенное влияние на отчетность. Если предыдущие транзакции присоединяются непосредственно к изменяемым таблицам, числа в исторических отчетах могут измениться очень плохо. Там действительно нет "правильного" ответа.

Другие вопросы по тегам