Я обрабатываю почти 30 пакетов и имею все виды файлов и сценариев, которые установлены.
Некоторые из тех сценариев могут работать, в то время как пакет установлен, но когда-то удален (настроенный против очищенного), они не должны больше выполняться.
Как это управляет в стандартных пакетах Ubuntu/Debian?
Например, у меня есть logrotate файл, который установлен с:
/var/log/snapwebsites/snapmanagerdaemon.log {
weekly
maxsize 10M
su snapwebsites snapwebsites
missingok
rotate 10
postrotate
/usr/bin/snapsignal snapmanagerdaemon/LOG
endscript
compress
delaycompress
notifempty
create 640 snapwebsites snapwebsites
}
/usr/bin/snapsignal
двоичный файл исчезнет, если все пакеты будут удалены, но этот logrotate сценарий остается на месте... поэтому, когда он выполняется, он перестал работать на том одном вызове.
Я думал, что мог сделать удаление в postrm сценарии как в:
if [ "$1" = "remove" ]
then
rm -f /etc/logrotate.d/snapmanagerdaemon
fi
Это работает на удалить шаг, но если пользователь переустанавливает пакет, он не возвращается (это не становится распакованным.) Так в результате я не был бы, получил ожидаемое вращение журнала. Нет, пока я насильственно не извлекаю тот файл и переустанавливаю его вручную.
Я вижу несколько решений, но я хотел бы знать, как это сделано в надлежащем пакете Debian.
Одно решение, которое работало бы, состоит в том, чтобы я добавил тест, чтобы знать ли snapsignal
все еще установлен.
postrotate
if test -x /usr/bin/snapsignal
then
/usr/bin/snapsignal snapmanagerdaemon/LOG
fi
endscript
Только это означает, что logrotate продолжает выполнять эту запись навсегда даже при том, что того пакета не стало. У меня есть подобное чувство о других сценариях, которыми я управляю. После того как пакет удален, не должно быть никакой потребности иметь такой сценарий, все еще работающий.
Обратите внимание, что logrotate является одним примером, показывающим проблему. Мы на самом деле заметили его с dpkg конфигурационным файлом, сценарий, под которым мы помещаем:
/etc/dpkg/dpkg.conf.d/...
который остается на месте после удаления.
Другой тип сценария, который остается и также вызовет проблемы: файлы КРОНА. Те, под которыми Вы устанавливаете /etc/cron.daily
, /etc/cron.monthly
, и т.д., Если кто-либо из тех сценариев попытается получить доступ к одному из Ваших двоичных файлов после удаления, то это перестанет работать.
С помощью некоторых других людей я нашел ответ в программном документе Debian, но это только разъяснено в раздел CRON Jobs (настроенный против более универсального раздела о таких сценариях.)
соответствующий абзац:
сценарии или crontab записи в этих каталогах должны проверить, установлены ли все необходимые программы, прежде чем они попытаются выполнить их. Иначе проблемы возникнут, когда пакет был удален, но не очищен, так как конфигурационные файлы сохранены в системе в этой ситуации.