Здравствуйте. На меня внезапно свалилась админская задача, и мне совершенно не приходит в голову ее решение. Имеется несколько сотен совершенно одинаковых компьютеров с linux-ом и пакетным менеджером yum. Все они подключены к одному репозиторию, к которому у меня есть непосредственный доступ. Мне эти машинки нужно админить через этот репозиторий, то есть все настройки я могу делать только через выпуск своих rpm обновлений. И если с установкой и настройкой необходимого ПО все очевидно, то сейчас возникла задача потереть с них лишние пакеты вроде различных древнекитайстких шрифтов, гномовских графических мануалов итд. Тупо место закончилось, надо освободить. На тестовой машинке набросал скрипт, который будет через "rpm -qa" проверять наличие на компьютере ненужных пакетов и через "yum remove -y" их удалять. Сам по себе скрипт прекрасно фурычет. Создал пустой пакет clean c целью запилить этот скрипт в графу %post spec-файла. После этого у меня включилась голова и сказала мне, что так оно работать не будет. Потому как на момент исполнения этого скрипта менеджер yum будет запущен. А так как он не позволяет запустить одновременно два экземпляра себя, в моем скрипте не исполнится ни rpm ни yum. Следовательно, он не сработает. Значит, мне нужно как-то запустить мой скрипт после того, как менеджер пакетов уже отработает и решит что, наконец, пора бы завершиться. Вот и возник вопрос, как бы это правильно организовать. Просто sleep-ом не выйдет, потому как непонятно, на какое время моему скипту придется заснуть. Вдруг поставят новую чистую машинку и захотят ее обновить до текущей версии актуальной конфигурации системы. Тогда первое же обновление будет проходить довольно долго и заранее неизвестно сколько, ведь сеть там может сбоить, или еще какие факторы случатся, которые замедлят работу обновления. В общем вот. Заранее прошу прощения за свое дилетантство, я программист по работе, но вот иногда на меня сваливаются вот такие админсткие задачи, которые я случайно не умею. С нетерпением жду совета от более опытного поколения)
Отложенный запуск скрипта
Устанавливаем пакет, во время установки пишите в крон задачу .....
Крон отрабатывает ваш скрипт и удаляет запись из задач.
О кроне думал уже. Дело в том, что компы обновляются по нему каждые пять минут. Ну, в смысле, не обновляются, а проверяют репозиторий на наличие обновлений. А если обновлений он найдет много и начнет их ставить, не будет ли это конфликтовать, если во время этого стукнет время исполниться моему скрипту?
Вам то надо все раз запустить, не мне вас учить но я бы сделал так:
бекап крона, делаем null.
Пишим своё в крон.
Выполняем скрипт.
Возвращаем бекап.
это конфликтовать, если во время этого стукнет время исполниться моему скрипту?
Пусть твой скрипт создаст write.lock файл в tmp и проверяет его. Если есть, то запускается. Если нет, то скрипт уже был запущен и работает.
Kettler, Большое спасибо, кажется, так может получиться. Надо будет, правда, потестить на аварийное отключение электричества, например, во время работы скрипта. Но вроде работает как надо. Еще раз большое спасибо.
Потому как на момент исполнения этого скрипта менеджер yum будет запущен.
А запустить свой скрипт через at? Не поможет? http://www.ithowto.ru/43-odnokratnoe-vypolnenie-zadach-pri-pomoshhi.html
Я бы как-то так сделал.
1. Добавить в cron отдельным файлом на запуск скрипта xxxx, можно регулярно выставить, на тот случай если будет выключен, чтоб отработало наверняка.
2. После запуска скрипт xxxxx проверяет файл с требованиями /tmp/xxxx.clear выполнился ли он или нет, если нет, то п.3
3. Проверить не работает ли пакетный менеджер, если работает то уходим в sleep и после выхода проверяем снова, пока не освободится.
4. Удаляем по списку добавляя результат в /tmp/xxxx.clear
5. Посылаем на почту результат.
6. Удаляемся из крона.