Отредактируйте crontab программно и принудительно обновите демон

StackOverflow https://stackoverflow.com/questions/1673143

Вопрос

Я пытаюсь написать веб-интерфейс для Crontab на Ruby, используя отличный драгоценный камень CronEdit.Я просмотрел исходный код crontab Диллона Крона и обнаружил, что он обновляет определенный файл, так что демон обновит список cron во время следующей проверки.

В man crontab для VixieCron написано:

Кроме того, cron проверяет каждую минуту, соответствует ли время обновления его каталога spool (или modtime на /и т. д./кронтаб) был изменен, и если да, cron будет потом изучите modtime по всем файлами и загрузить те, которые изменились.Таким образом, cron не нужно перезапускать всякий раз, когда изменяется файл crontab.Обратите внимание, что команда crontab(1) обновляет время изменения каталога spool всякий раз, когда она изменяет crontab.

Существует ли какой-либо независимый от платформы (Ubuntu, Red Hat, ArchLinux, Mac OS X) способ гарантировать, что после ручного редактирования файла Cron демон обновит его в обязательном порядке?

Это было полезно?

Решение 3

Большое вам спасибо, гниблер и Аарон.Я только что просмотрел исходный код для обоих драгоценных камней 'whenever' и 'cronedit' для Ruby.Оба они выполняют 'crontab -', который заменяет существующий cron-файл обновленными записями cron.Это означает, что, вопреки моему первоначальному вопросу, эти библиотеки используют стандартный инструмент crontab, который, в свою очередь, будет выполнять любые действия, необходимые для обновления демона.

Я думаю, что лучший независимый от платформы и не зависящий от cron (dillon, vixie, mcron и т.д.) способ обновления демона - это всегда использовать связанную утилиту crontab.Даже при программном редактировании пользовательская программа должна передать новый cron-файл утилите crontab, которая выполнит все, что требуется для этой конкретной платформы / cron.

@Марк, спасибо тебе за комментарии.Тем не менее, я пытаюсь предоставить простой веб-интерфейс, который пользователь может настраивать через www точно так же, как напрямую редактировать файл crontab.

Большое вам спасибо за ваши ответы!

Другие советы

Нет, такого не существует.Если вы знаете, что это VixieCron, то обновите временную метку каталога.В противном случае вам, возможно, удастся подделать это:Установите переменную env EDITOR прежде чем вы призовете crontab -e (который должен вызвать редактор для crontab).

Идея состоит в том, чтобы настроить редактор на какую-нибудь программу, которая вносит изменения. crontab -e будет ждать завершения работы редактора, перечитает файл и сообщит cron, что что-то изменилось.

Однако, если у вас установлена старая версия cron, вы все равно должны перезапустить ее.Но я сомневаюсь, что вы сможете найти такие древние версии на чем-либо, работающем под управлением Linux или Mac OS X.

Нормальные современные дистрибутивы Linux имеют /etc/cron.d/ каталог, в который вы можете поместить свою запись crontab в виде отдельного файла.Если я правильно помню, новый cronfile считывается в течение 2 минут после записи

Если это так важно, почему бы не использовать другой рычаг?Другими словами, есть два варианта:

кронтаб 1:/ сделайте / какую-нибудь / очень / специфическую / вещь с определенными параметрами, которые мне нужно изменить и т.д.

кронтаб 2:/делай/то,что/должно/быть/сделано

В # 2 задание отвечает за определение во время выполнения того, что нужно сделать, и за выполнение этого.При таком дизайне идея необходимости понимать, как crontab работает на каком-то детальном уровне, неуместна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top