Я настроил ACPI wakeup, чтобы мой ноутбук просыпался в определенное время каждое утро. Часовой пояс для этого - UTC. Я хочу настроить свои crontabs также с использованием UTC, чтобы они соответствовали будильнику.
Как ты делаешь это?
Я пытался редактировать, /etc/default/cron
чтобы включить:
TZ="UTC"
но это не работает (Я тоже пробовал TZ=UTC
и TZ="UTC/GMT"
)
Есть идеи?
sudo service cron restart
после редактирования?Ответы:
У меня была похожая проблема на Trusty (14.04). Решил это, установив часовой пояс машины, а затем перезапустив
cron
службуsudo dpkg-reconfigure tzdata
- следуйте инструкциям, чтобы выбрать регион / странуsudo service cron restart
timedatectl
- Проверьте настройки датыисточник
date
в командной строке, чтобы подтвердить, что дата является правильной в соответствии с вашими ожиданиями.Нет простого способа достичь этого. cron использует местное время.
/etc/default/cron
а другиеTZ
спецификации в crontab просто указывают, чтоTZ
следует использовать для процессов, запускаемых cron, это не влияет на время запуска.Большинство решений, которые я видел, включают в себя утилиту посередине, поэтому cron будет запускать что-то, что потом будет определять, когда начинать работу в UTC (например, если вы знаете, что вас интересуют только изменения DST, отключите его за 2 часа до этого, рассчитайте разницу во времени, и начните с этого момента. Посмотрите
at
. Для этого люди часто используютperl
или (python
или) подобные языки сценариев).Есть неприятный способ взломать его, если хотите. cron только читает информацию TZ из системы при запуске. Так что, если это постоянно работающий сервер, вы можете просто установить TZ на UTC, перезагрузиться, а после загрузки установить его в свой местный часовой пояс. Вы могли бы написать это тоже.
В качестве альтернативного подхода также обратите внимание на
@reboot
синтаксис cron, который должен выполнять сценарии после загрузки, который звучит так, как вы, возможно, захотите.источник
Есть файл, который управляет системным часовым поясом. Я только что получил ту же проблему, вот решение:
Если вы не настроили часовой пояс вручную, во время работы
date
должно отображаться время UTC.создать резервную копию
удалить файл:
Я живу в Чикаго, (вам может понадобиться изменить путь, используя подсказки клавиш), поэтому:
Затем перезагрузите компьютер. При запуске системы выполните: дата
Теперь ваш часовой пояс должен быть там сейчас, и Cron будет смотреть на это.
К вашему сведению: установка переменной TZ является временным решением и может иногда выступать в роли «маски».
источник
date
работало без перезагрузки, и перезапуска ОСsudo service crond restart
было достаточно, чтобы исправить время работы cron.По состоянию на март 2017 года я обнаружил, что crond поддерживает переменную CRON_TZ в каждом crontab.
- цитата из справочной страницы crontab (5)
Это позволило мне указать время выполнения каждого cronjob по местному времени, которое автоматически учитывало DST, в то время как сервер оставался в UTC.
источник
ls /usr/share/zoneinfo/America
чтобы увидеть варианты.Хорошо, я потратил некоторое время и выяснил, как это сделать на Ubuntu Natty, и вот как я это сделал. Там может быть более элегантный способ, но этот способ работает.
Во-первых, нам нужно обернуть исполняемый файл cron в оболочку, которая устанавливает переменную TZ. Вот как:
Затем создайте новый файл / usr / sbin / cron. Я использовал vim, но вы можете использовать любой редактор, который хотите, просто сделайте файл похожим на это:
Сделайте новый исполняемый файл cron:
Теперь перезапустите демон cron:
Ваши задания cron теперь будут выполняться по расписанию на основе UTC - ОДНАКО, даже если время их выполнения будет UTC, при запуске они будут иметь часовой пояс, установленный для того, что определено для системы. Чтобы изменить это, поместите это в ваш crontab перед любыми командами:
Итак, ваш crontab будет выглядеть примерно так:
источник
См
/etc/default/cron
. Вы можете установитьTZ
здесь -all- crontabs, и это должен бытьTZ=UTC
iirc. Так что твой метод должен был сработать.Посмотрите на fcron . Вы можете установить отдельные crontabs в разных часовых поясах:
timezone-name 'time zone of the system'
Запустите задание в заданном часовом поясе. timezone-name - это строка, которая действительна для переменной окружения TZ: более подробную информацию смотрите в документации вашей системы. Например, «Европа / Париж» действует в системе Linux. Эта опция правильно обрабатывает переход на летнее время. Переменная окружения TZ устанавливается в значение часового пояса при выполнении задания, определяющего этот параметр.
Обратите внимание, что если вы укажете ошибочный аргумент timezone-name, он будет молча проигнорирован, и задание будет выполнено в часовом поясе системы.
источник
Пожалуйста, смотрите мой следующий пост для решения для Ubuntu
Я знаю, что это форум по Ubuntu, но я верю, что ответ будет очень похож на то, как вы это сделаете в системе Red Hat. У меня нет системы Ubuntu, чтобы проверить это, но я проверял ее в Red Hat.
Все, что вам нужно сделать, это добавить строку в скрипт инициализации демона cron. Установите и экспортируйте переменную окружения TZ, например так:
Затем перезапустите ваш демон cron. Убедитесь, что вы поместили этот экспорт в стартовый скрипт демона cron ПОСЛЕ любой другой настройки переменных и источников - я думаю, что это может быть причиной того, что оригинальное редактирование
/etc/default/cron
сценария автора не сработало для него. Может быть, он установил его, но затем он был сброшен другим сценарием.Обратите внимание, что это повлияет только на самого демона cron, а не на задания, которые вы запускаете через cron, поэтому, если вы хотите, чтобы задание cron использовало UTC в качестве часового пояса, вам нужно будет установить его и в самом задании.
Вы, вероятно, не можете скопировать это дословно и заставить его работать на коробке Ubuntu, но вот сценарий инициализации, который я использовал, чтобы проверить это на Red Hat. Вы найдете экспорт прямо перед
start()
функцией:источник
Только что понял это на Ubuntu 14/16. Работал отлично для меня.
Шаги (подразумевается sudo):
источник
Как насчет оценки времени utc в сценарии оболочки? Запланируйте запуск сценария оболочки каждый час. В верхней части скрипта получите UTC-час из команды date. Если вам не нужен UTC, выйдите.
Этот скрипт завершится, если это не 1 час ночи.
источник
Вы можете установить переменную окружения CRON_TZ. Если задание cron выполняется на удаленном сервере, вы, вероятно, должны заметить, что оболочкой, используемой crontab, является sh . Вы можете перепроверить / etc / crontab .
источник