LINUX.ORG.RU
ФорумAdmin

Массовое редактирование crontab

 , ,


0

1

Доброго времени суток.

Подскажите, можно как-то скриптом поправить crontab? Имеется пул из ~300 машин. В кроне прописано задание на запуск обновления. Нужно поправить время.

Как это выглядит сейчас:

58 23 * * * bash /usr/local/script/update_run.sh > /var/log/update.log 2>&1

Нужно изменить на:

00 16 * * * bash /usr/local/script/update_run.sh > /var/log/update.log 2>&1

Редактирование файла /var/spool/cron/crontabs/username ничего не даёт. Пробовал удалять из него задание командой вида:

sudo sed '/58 23/d' /var/spool/cron/crontabs/root

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

Подскажите, возможно есть какой-либо механизм работы с crontab из скрипта?


надо почитать доку на sed

sed -i

targitaj ★★★★★
()

Если верить man 1 crontab, то

sudo sh -c 'crontab -u username -l | sed '/58 23/d' | crontab -u username -'
должно делать то, что вам нужно. Почему вы не хотите так?

unterwulf
()
Последнее исправление: unterwulf (всего исправлений: 2)
Ответ на: комментарий от unterwulf

Честно говоря с удалением меня смутило, что не происходит именно запись в крону. Как написал targitaj работает запись в крону. А вообще нужно поменять время выполнения задания.

Подскажите, в чем может быть проблема в таком запросе:

sudo sed -e 's/58/00; s/23/16' /var/spool/cron/crontabs/root
hanharr
() автор топика

Имеется пул из ~300 машин

Используй /etc/cron.d/cronfile. В задание понадобится добавить имя пользователя (перед командой). Рестартовать кронтаб не нужно, содержимое каталога проверяется каждую минуту.

sin_a ★★★★★
()
Ответ на: комментарий от zolden

Там проблема не в записи в крону, пишет:

sed: -e выражение #1, символ 14: неизвестный модификатор к `s'

sin_a

Спасибо, попробую.

hanharr
() автор топика
Ответ на: комментарий от zolden

Да, спасибо. Еще в конце надо было добавить /g'. Без этого почему-то высыпалась ошибка.

В итоге вышло так:

sed -i 's/58 23/00 16/g' /var/spool/cron/crontabs/root
hanharr
() автор топика
Ответ на: комментарий от hanharr

sin_a прав так-то. Директории типа name.d придуманы как раз чтобы не заниматься вышиванием крестиком с помощью sed -i, а как белый человек копировать и удалять файлы.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Штука в том, что в крон уже прописано задание и прописано оно как раз в /var/spool/cron/crontabs/root. В /etc/cron.d/* не нашел пометок об интересующем меня задании. Поэтому пришлось изобретать велосипед.

Не поделитесь ссылочкой, желательно на русском, про то как добавлять задания в /etc/cron.d/*. Там лежит несколько файлов, в каждом прописано своё. Т.е. нужно создать новый и прописать задание просто?

hanharr
() автор топика
Ответ на: комментарий от hanharr

да просто по образцу надо создать свой файл. Имя любое. в привычный синтаксис добавляется юзернейм, типа так:

# m h  dom mon dow   username command
54 23 * * * root touch /var/crontest

legolegs ★★★★★
()

По хорошему для таких вещей используют puppet или csync

Хотя для одноразового варианта подойдет и команда. Но это чревато непредсказуемыми вещами

ism ★★★
()
Последнее исправление: ism (всего исправлений: 2)
Ответ на: комментарий от ism

Puppet, кстати, имеется. В этом и была идея. Написать скриптик, который проверяет время в кроне и если оно отличается, то заменяет его на нужное. Или puppet'ом можно иначе поправить?

hanharr
() автор топика
Ответ на: комментарий от hanharr

Ну тут не скриптик а конфиг puppet, а так можно наваять что угодно

В конфиге можно тонко апдейтить текстовые файлы

ism ★★★
()
Последнее исправление: ism (всего исправлений: 2)
Ответ на: комментарий от adn

Хм, интересно.

ism, подскажите, где можно почитать про редактирование файлов с помощью puppet. Звучит как крайне полезная информация.

hanharr
() автор топика
Ответ на: комментарий от hanharr

У puppet есть опция конфига file_line

Примеры https://serverfault.com/questions/238708/adding-lines-to-etc-profile-with-puppet

https://ask.puppet.com/question/23634/file_line-cannot-delete-lines-by-regexp/

https://ask.puppet.com/question/14628/using-file_line-for-modifying-the-file-...

Справка http://www.puppetmodule.info/github/simp/puppetlabs-stdlib/puppet_types/file_...

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

ism ★★★
()
Последнее исправление: ism (всего исправлений: 2)
Ответ на: комментарий от ism

Это понятно. Но, насколько понимаю, это разовая задача. Ansible решает эту задачу одной ad-hoc командой.

adn ★★★★
()
Ответ на: комментарий от adn

Если у тебя 300 машин разовых задач не бывает :)

А значит нужен инструмент который решает похожие

Тут все равно что, Ansible или чтото другое, но у автора поста кажись puppet

ism ★★★
()
Последнее исправление: ism (всего исправлений: 3)
Ответ на: комментарий от ism

Бывает. Вот как эта. Ansible ставить не надо. Puppet хорош как менеджер конфигураций. Но он избыточен для одноразовых административных задач.

adn ★★★★
()
Ответ на: комментарий от adn

Сильно сомневаюсь что одноразовая задача отработает одинаково на множстве машин, и надо будет проверять прошло оно или нет

В puppet же есть средства проверки

ism ★★★
()
Ответ на: комментарий от ism

Ну почитай же про ansible :) Все отработает и проверки пройдет и статистику всю выведет. Расширяй кругозор :)

adn ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.