DateTime?
- это то же самое, что и Nullable<DateTime>
. То есть: экземпляр DateTime?
может содержать «NULL», а экземпляр DateTime
- нет. (Это верно для всех типов значений, начиная с .NET 2.0. Тип значения не может содержать NULL, но, начиная с .NET 2.0, типы значений, допускающие значение NULL, поддерживаются с помощью конструкции Nullable<T>
(или сокращения?).
Вы можете получить значение DateTime? И поместить его в DateTime, выполнив следующее:
DateTime? someNullableDate;
DateTime myDate;
if( someNullableDate.HasValue )
myDate = someNullableDate.Value;
Другой, более краткий способ получить значение Nullable, это использование оператора слияния нуль:
DateTime myDate = someNullableDate?? default(DateTime);
Если вы используете Fabric для развертывания, вы можете добавить функцию, которая редактирует ваш crontab.
def add_cronjob():
run('crontab -l > /tmp/crondump')
run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump')
run('crontab /tmp/crondump')
Это добавит задание в ваш crontab (отказ от ответственности: полностью непроверенный и не очень идемпотентный).
Сохранить crontab во временный файл.
Добавить строку в файл tmp.
Запишите crontab обратно.
Вероятно, это не совсем то, что вы хотите сделать, но в этом случае вы можете подумать о том, чтобы проверять crontab в git и перезаписывать его на сервере при каждом развертывании. (если для вашего проекта есть специальный пользователь.)
Вы, вероятно, можете использовать что-то вроде CFEngine / Chef для развертывания (он может развертывать все, включая задания cron)
Однако, если вы зададите этот вопрос - возможно, у вас много продукции серверы, на каждом из которых выполняется большое количество запланированных заданий. Если это так, вам, вероятно, понадобится инструмент, который может не только развертывать задания, но и отслеживать успешные неудачи, позволяющий легко просматривать журналы последнего запуска, статистику выполнения, позволяющий легко изменять расписание для многих заданий и серверов сразу (в связи с плановым обслуживанием ...) и т. д.
Я использую коммерческий инструмент под названием "UC4". Я не рекомендую это делать, поэтому надеюсь, что вы найдете лучшую программу, которая решит ту же проблему. Я просто говорю, что администрирование заданий не заканчивается, когда вы их развертываете.
Если вы используете Django, взгляните на систему заданий из django-command-extensions .
Преимущества в том, что вы можете сохранить свои рабочие места внутри структура вашего проекта с контролем версий, напишите все на Python и настройте crontab только один раз.