Как я могу использовать cron для планирования сценария, который реализует переход на летнее время в приложениях, не поддерживающих DST, когда мой сервер автоматически использует DST?

Другим бесплатным сервисом, который вы можете использовать, является Spideroak, который немного менее прост, чем Dropbox и UbuntuOne, но с другой стороны более гибкий: вы можете выбрать любую папку, которую вы хотите для резервного копирования, и решить, какие папки синхронизироваться. Это позволяет получить более приятную конфигурацию, потому что вы можете использовать службу для резервного копирования данных, которые вы не хотите синхронизировать на всех машинах.

Еще одно преимущество (хотя трудно проверить, действительно ли это так): All данные зашифрованы, у них есть Spideroak , что означает, что они даже не знают имена ваших файлов.

5
задан 5 September 2010 в 01:21

2 ответа

Вы можете попробовать переключить UTC=no, если это yes или наоборот в /etc/default/rcS. Для этого выполните:

gksu gedit /etc/default/rcS
  • Измените UTC=no на UTC=yes, или
  • Измените UTC=yes на UTC=no. [ 1110]

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

0
ответ дан 5 September 2010 в 01:21

Ответ лежит в источниках cron (которые вы можете получить с помощью apt-get source cron), особенно в основном цикле в строках 159-272 файла cron.c.

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

  1. Время прыгнуло вперед более чем на 5 минут, но менее чем на 3 часа (запускается летнее время): cron запускает задания с подстановочными знаками, запланированные в фактическое время, и любая работа, запланированная в фиксированное время между вычисленным временем и фактическим временем. Соответствующий источник находится в строках 221-247:

      /*
       * case 2: timeDiff is a medium-sized positive number,
       * for example because we went to DST run wildcard
       * jobs once, then run any fixed-time jobs that would
       * otherwise be skipped if we use up our minute
       * (possible, if there are a lot of jobs to run) go
       * around the loop again so that wildcard jobs have
       * a chance to run, and we do our housekeeping
       */
      Debug(DSCH, ("[%d], DST begins %d minutes to go\n",
          getpid(), timeRunning - virtualTime))
      /* run wildcard jobs for current minute */
      find_jobs(timeRunning, &database, TRUE, FALSE);
    
    
      /* run fixed-time jobs for each minute missed */ 
      do {
         if (job_runqueue())
                 sleep(10);
         virtualTime++;
         find_jobs(virtualTime, &database, FALSE, TRUE);
         set_time();
      } while (virtualTime< timeRunning &&
          clockTime == timeRunning);
      break;
    
  2. Время прошло назад менее чем на 3 часа (DST заканчивается): просто запускайте подстановочные задания, пропускайте задания с фиксированным расписанием, так как они уже бежал. Соответствующий источник находится в строках 247-258:

    /*
     * case 3: timeDiff is a small or medium-sized
     * negative num, eg. because of DST ending just run
     * the wildcard jobs. The fixed-time jobs probably
     * have already run, and should not be repeated
     * virtual time does not change until we are caught up
     */
    Debug(DSCH, ("[%d], DST ends %d minutes to go\n",
        getpid(), virtualTime - timeRunning))
    find_jobs(timeRunning, &database, TRUE, FALSE);
    break;
    

Таким образом, при входе в летнее время у вас не должно возникнуть проблем: ваш скрипт будет запущен (либо непосредственно перед, либо сразу после скачок времени).

При выходе из DST существует риск того, что ваша (фиксированная) работа будет пропущена, если вы запланируете ее точно в 1 час. Мое предложение было бы запланировать запуск либо за 1 минуту до 1 часа, либо в 2 часа (или после).

0
ответ дан 5 September 2010 в 01:21

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

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