1

Здравствуйте. На меня внезапно свалилась админская задача, и мне совершенно не приходит в голову ее решение. Имеется несколько сотен совершенно одинаковых компьютеров с linux-ом и пакетным менеджером yum. Все они подключены к одному репозиторию, к которому у меня есть непосредственный доступ. Мне эти машинки нужно админить через этот репозиторий, то есть все настройки я могу делать только через выпуск своих rpm обновлений. И если с установкой и настройкой необходимого ПО все очевидно, то сейчас возникла задача потереть с них лишние пакеты вроде различных древнекитайстких шрифтов, гномовских графических мануалов итд. Тупо место закончилось, надо освободить. На тестовой машинке набросал скрипт, который будет через "rpm -qa" проверять наличие на компьютере ненужных пакетов и через "yum remove -y" их удалять. Сам по себе скрипт прекрасно фурычет. Создал пустой пакет clean c целью запилить этот скрипт в графу %post spec-файла. После этого у меня включилась голова и сказала мне, что так оно работать не будет. Потому как на момент исполнения этого скрипта менеджер yum будет запущен. А так как он не позволяет запустить одновременно два экземпляра себя, в моем скрипте не исполнится ни rpm ни yum. Следовательно, он не сработает. Значит, мне нужно как-то запустить мой скрипт после того, как менеджер пакетов уже отработает и решит что, наконец, пора бы завершиться. Вот и возник вопрос, как бы это правильно организовать. Просто sleep-ом не выйдет, потому как непонятно, на какое время моему скипту придется заснуть. Вдруг поставят новую чистую машинку и захотят ее обновить до текущей версии актуальной конфигурации системы. Тогда первое же обновление будет проходить довольно долго и заранее неизвестно сколько, ведь сеть там может сбоить, или еще какие факторы случатся, которые замедлят работу обновления. В общем вот. Заранее прошу прощения за свое дилетантство, я программист по работе, но вот иногда на меня сваливаются вот такие админсткие задачи, которые я случайно не умею. С нетерпением жду совета от более опытного поколения)

2

Устанавливаем пакет, во время установки пишите в крон задачу .....
Крон отрабатывает ваш скрипт и удаляет запись из задач.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

3

О кроне думал уже. Дело в том, что компы обновляются по нему каждые пять минут. Ну, в смысле, не обновляются, а проверяют репозиторий на наличие обновлений. А если обновлений он найдет много и начнет их ставить, не будет ли это конфликтовать, если во время этого стукнет время исполниться моему скрипту?

4

Вам то надо все раз запустить, не мне вас учить но я бы сделал так:
бекап крона, делаем null.
Пишим своё в крон.
Выполняем скрипт.
Возвращаем бекап.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

5

esvstn пишет:

это конфликтовать, если во время этого стукнет время исполниться моему скрипту?

Пусть твой скрипт создаст write.lock файл в tmp и проверяет его. Если есть, то запускается. Если нет, то скрипт уже был запущен и работает.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

6

Kettler, Большое спасибо, кажется, так может получиться. Надо будет, правда, потестить на аварийное отключение электричества, например, во время работы скрипта. Но вроде работает как надо. Еще раз большое спасибо.

7 (29.07.2014 15:21:42 отредактировано Cruiser78)

esvstn пишет:

Потому как на момент исполнения этого скрипта менеджер yum будет запущен.

А запустить свой скрипт через at? Не поможет? http://www.ithowto.ru/43-odnokratnoe-vy … oshhi.html

8

Я бы как-то так сделал.

1. Добавить в cron отдельным файлом на запуск скрипта xxxx, можно регулярно выставить, на тот случай если будет выключен, чтоб отработало наверняка.
2. После запуска скрипт xxxxx  проверяет файл с требованиями /tmp/xxxx.clear выполнился ли он или нет, если нет, то п.3
3. Проверить не работает ли пакетный менеджер, если работает то уходим в sleep и после выхода проверяем снова, пока не освободится.
4. Удаляем по списку добавляя результат в /tmp/xxxx.clear
5. Посылаем на почту результат.
6. Удаляемся из крона.