Подтвердить что ты не робот

Рекомендации по сохранению cronjobs и shell-скриптов?

Я унаследовал растягивающий crontab, который мне нужно поддерживать и обновлять. У меня нет большого опыта работы с ним или bash сценариев (я думаю, что у меня есть приличное сцепление с основами), и я хочу сделать хорошую работу. Краткий запрос: любые рекомендации по "рефакторингу" беспорядочного crontab и набора сценариев bash

Длительный запрос: я столкнулся с рядом проблем, но так много людей используют файлы cron и т.д., что я чувствую, что мне не хватает большого хранилища информации, лучших практик и инструментов - или это просто стилистика разница для такого рода программирования? (Мое смещение: зачем делать что-то вручную, если я могу использовать инструмент, чтобы сделать это быстрее, последовательно и хорошо?).

Примеры проблем до сих пор:

  • Из-за внешнего события, crontab не работал в течение нескольких дней. Вместе с кем-то другим мы вручную просмотрели список, пытаясь выяснить, что не запускалось, что нам нужно было повторить, и какие скрипты нам нужно было редактировать и запускать с более ранними датами и т.д. Что я не могу найти:

    • В Интернете есть много (немного бессмысленных) "генераторов cron". Где обратное? Что-то, что я могу накормить в длинном crontab, двух датах и ​​вывести его, какие процессы должны выполняться, когда, или сколько всего раз? Это похоже на мои скудные возможности сценариев, так что разве это уже не должно существовать?;)
    • В качестве альтернативы, если мне когда-либо понадобится сделать это снова, есть ли способ вызвать bashscript, чтобы все экземпляры date() были предварительно настроены на более раннее время, вместо того, чтобы изменять каждый вызов даты в script? (например, для всех пропущенных отчетов и счетов фактурирования).
  • Оказывается, конкретный отчет не работал в течение двух лет. Его снова попросили, и вот, это было в кронтабе! bash script просто сломал ссылки на ссылки на соответствующие файлы. Что я не могу найти: какой-то контроль пути для файлов bash? Как средство проверки ссылок на сайт. Да, я в конце концов все это проведу вручную, но это покажет некоторые по крайней мере некоторые проблемные области.

  • Звучит несколько раз, либо слишком длинный, либо короткий промежуток между зависимыми процессами, поэтому обновления произошли после того, как первый был запущен или первый не завершил работу до того, как второй был называется. Я видел несколько возможных вариантов для этого (например, anacron работает в последовательном порядке), но что бы вы порекомендовали?

  • Существует также большое количество практически бессмысленных писем, созданных из crontab (скрипты бросают ошибки, но работают "правильно", в основном не работают, или просто печатают бесконечные сценарии несущественных). Я буду вручную просматривать сценарии и пытаться заставить их предоставлять более полезные данные или "преуспеть спокойно", но вы знаете - какие-либо рекомендации?

Если мое понимание или макет проблемы путают, то я извиняюсь, но эй... ты видишь мою проблему! Мне нужно идти от новичка, зная, что делать, чтобы понять это правильно, и не втягивать в себя более суровую систему. Спасибо!

4b9b3361

Ответ 1

Не полный ответ, но больше ресурсов, которые были полезны: http://blog.endpoint.com/2008/12/best-practices-for-cron.html

Я медленно перехожу к этому и пытаюсь реализовать каждую из точек. Я не думал, что лучше всего подойдет Google.: P

Для управления версиями я просто собираюсь использовать RCS тем временем, поскольку я редактирую скрипты по файловому принципу, но мне было рекомендовано настроить Git (или Mercurial, если я был в системе Windows).

Это действительно здорово: http://everythingsysadmin.com/2010/09/xed-202-released.html "xed - это perl script, который блокирует файл, запускает $EDITOR в файле, а затем разблокирует его."... и помещает его в RCS, если он еще не был. Полностью безмозглый контроль версий. Если я обернусь вокруг bash, я бы хотел создать ярлык для редактирования, который автоматически связывается с той системой управления версиями, которую я использую.

Другие советы, которые я получил от системного администратора, Даты: вместо использования say, date или --date = "last monday", используйте фиксированную дату и добавляйте к ней каждый день/неделю и т.д. Каждый раз, когда она выполняется (если не больше, чем текущий день), потому что тогда, если script не запускается, я могу повторно повторно запустить script до тех пор, пока он не догонит. Ах! (И это может показаться очевидным, но кучи отчетов, которые я в конечном итоге отредактирую, не говорят о том, на какие даты работает отчет. Исправить.)

И был уверен, что я должен попытаться получить сообщения электронной почты cron как можно тише, чтобы я действительно заметил, есть ли сообщение об ошибке. Есть обертки для лучшего сообщения об ошибках cron, которые я еще не исследовал, связанный здесь: http://habilis.net/cronic/

Ответ 2

Геркулесная задача впереди вас, удачи.:)

Я бы предложил найти все задачи, которые запускаются ежедневно, и вставлять их в свои собственные сценарии в /etc/cron.daily/. То же самое для еженедельно в /etc/cron.weekly, ежечасно и ежемесячно.

Возможно, вам захочется исследовать использование anacron(8) для планирования ваших заданий, если машина не всегда будет в сети, но вам все еще нужен определенный уровень контроля при выполнении заданий. Это был инструмент cron-helper-tool по умолчанию для нескольких распределений в течение нескольких лет, поэтому, надеюсь, он будет достаточно стабильным, чтобы полагаться на ваши собственные задачи; но я мог легко представить, что это может не соответствовать вашим потребностям.

Подделка дат сценариям может быть выполнена по крайней мере с двумя пакетами на Ubuntu: datefudge и faketime. У меня тоже нет опыта, но оба они звучат так, как будто они могут помочь. Надеюсь, вам это не понадобится в будущем.:)

Извините, я не знаю пути для проверки скриптов bash. Это кажется маловероятным, так как простые скрипты просты и легко проверяются глазом:), и сложные скрипты будут генерировать свои пути во время выполнения. Возможно, вы могли бы хранить базу данных о путях, используемых каждым script, и писать новый script, чтобы регулярно проверять эту базу данных.

Вы можете отключить электронную почту cron, установив MAILTO="". Я не уверен, что мне это нравится. Возможно, установка MAILTO в учетную запись только поможет потоп. Еще один вариант действительно хорош в ваших правилах procmail(1), чтобы вы могли набивать их в другом почтовом ящике полностью.

Получение преимуществ при использовании элементов управления mutt color или score может помочь вам определить пшеницу среди мякины. (color index red black ERROR или аналогичные команды могут помочь вам быстрее выявить проблемы.)