сrontab в Ubuntu и Fedora

    2010-02-22 13:08 | Автор: Vasile Chelban | Filed under: Vasile

    Стучится убунтовод мне в скайп с задачкой - в пользовательском crontab'e из двух задач выполняется только первая. Ответ мой был прост - "зри в лог!". Оказалось там ничего интресного. Точнее интересно то что по второй задаче ничего нет - ни ошибок, ни чего. Тут на меня находит прозрение - "ты каким редактором пользуешься?". В ответ - mcedit. Сразу совет - добавь "\n" в конец файла. Догадка оказалась верна - cron распознал только строки завершающиеся на символ перевода строки.

    Так как оба мы не боимся глядеть в корень - нахожу страницу описания пакета для его версии Ubuntu, качаю исходники cron-3.0pl1-106ubuntu3 и убеждаюсь что он не использует стандартные функции вроде fgets(), но по символьный ввод с явной проверкой на "\n". Не самый красивый и эффективный код.

    Теперь вспоминаю что у меня Fedora, и в Fedora за последние выпуски не раз менялся cron демон. Сейчас - cronie (наследник классического vixie-cron), но доступен и fcron. Уже не гляжу в исходники, а просто создаю crontab пользователя (crontab -e). В vim'e ввожу 2 строки, проверяю - работают обе. Анализирую и понимаю что vim корректно вставил перенос строк в конец файла. Имитирую use case с Ubuntu: EDITOR=mcedit crontab -e и удаляю все после конца второй строки.... Момент истины..

    $ EDITOR='mcedit' crontab -e

    crontab: installing new crontab
    "/tmp/crontab.XXXXEvdcxV":2: premature EOF
    errors in crontab file, can't install.

    Do you want to retry the same edit? n
    crontab: edits left in /tmp/crontab.XXXXEvdcxV

    Всё правильно - соответствует общепринятому поведению и подчищает явно за пользователем. Ну разве не дружественный к пользователю интерфейс?

    1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)
    Loading...

    Метки:

    4 комментария »


    комментария 4

    1. Alex:

      а убунтоводы чешут репу 🙂

    2. jekader:

      проверил — да, под debian никакой ошибки не выводится при отсутствии последнего переноса. К чему-бы это?

      То есть я запустил
      EDITOR=mcedit crontab -e
      удалил последний перенос, и оно удачно перезагрузило новый crontab 🙂

    3. Vasile:

      @jekader
      ты проверь — последнее задание выполняется?

    4. jekader:

      неа 🙂

    Leave a comment

    *