Как проверить службы, требующие перезагрузки (служб, а не машины), путем установки обновлений для других пакетов

Если я запустил sudo apt-get upgrade, тогда мне будет показан список пакетов, и если какой-либо из них - службы, их, возможно, придется перезапустить (что делается автоматически при установке обновлений). Как я могу узнать, потребует ли перезапуск службы один из этих пакетов, например, если я обновляю пакет, который не называется mysql*, то я хотел бы знать, прежде чем устанавливать обновления, которые могут вызвать перезагрузку служба mysql (если пакет называется mysql*, я предполагаю, что требуется перезагрузка для обслуживания). Или это никогда не произойдет? Если требуется перезагрузка службы mysql, я удалю этот узел из пулов балансировки нагрузки и дайте всем соединениям завершить его до установки обновлений.

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

Спасибо за вашу помощь.

1
задан 18 June 2014 в 13:37

1 ответ

Один из способов проверить файлы Debian control перед их установкой. Я тестировал это только с несколькими пакетами. (Может потребоваться настройка)

Удалить кеш APT-пакетов, просто простой способ отслеживания новых пакетов:
sudo rm -f /var/cache/apt/archives/*.deb
Запуск APT в режиме только для загрузки
sudo apt-get -d upgrade
или
sudo apt-get -d install ...
Извлеките их control файлы:
mkdir tmp
for i in $(ls /var/cache/apt/archives/*.deb) ; do echo $i;  dpkg -e $i tmp/$(basename $i .deb); done
Сохранять только preinst, postinst, prerm & amp; postrm scripts:
find tmp/ ! -name "preinst" ! -name "postinst" ! -name "prerm" ! -name "postrm"  -type f -exec rm -f {} \;
Поиск команд службы (init.d / upstart):
grep -B2 -r -e"service " -e" start" -e"start " -e" restart" -e"restart " -e" stop" -e"stop " -e "/etc/init.d" -e "invoke-rc.d " tmp/
-B2, чтобы показать 2 строки перед совпадением. Некоторые скрипты используют переменные внутри команды, поэтому показ некоторых строк заголовка может лучше понять, что пытается сделать скрипт. Установить пакеты затем очистить
# WARRNING, recheck your folder for correct name
rm -rf tmp

Пример вывода без строк до:

$ grep -r -e"service " -e" start" -e"start " -e" restart" -e"restart " -e" stop" -e"stop " -e "/etc/init.d" -e "invoke-rc.d " tmp/
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:  if [ -x /usr/sbin/invoke-rc.d ]; then
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:    invoke-rc.d mysql $1
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:    /etc/init.d/mysql $1
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:# In case the server wasn't running at all it should be ok if the stop
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:set +e; invoke stop; set -e
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:db_stop # in case invoke failes
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:if [ -x "/etc/init.d/mysql" ] || [ -e "/etc/init/mysql.conf" ]; then
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postinst:    invoke-rc.d mysql start || exit $?
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/prerm:if [ -x "/etc/init.d/mysql" ] || [ -e "/etc/init/mysql.conf" ]; then
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/prerm:   invoke-rc.d mysql stop || exit $?
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:# Try to stop the server in a sane way. If it does not success let the admin
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:    if [ ! -x /etc/init.d/mysql ]; then return; fi
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:    if [ -x /usr/sbin/invoke-rc.d ]; then
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:      cmd="invoke-rc.d mysql stop"
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:      cmd="/etc/init.d/mysql stop"
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:      echo "There is a MySQL server running, but we failed in our attempts to stop it." 1>&2
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:      db_stop    
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:6691f2fdc5c6d27ff0260eb79813e1bc  /etc/init.d/mysql
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst: if [ -e "/etc/init.d/mysql" ] && [ -L "/etc/init.d/mysql" ] \
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:    && [ $(readlink -f "/etc/init.d/mysql") = /lib/init/upstart-job ]
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/preinst:     rm -f "/etc/init.d/mysql"
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:# Try to stop the server in a sane way. If it does not success let the admin
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:  if [ -x /usr/sbin/invoke-rc.d ]; then
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:    invoke-rc.d mysql stop
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:    /etc/init.d/mysql stop
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:    echo "Trying to stop the MySQL server resulted in exitcode $?." 1>&2
tmp/mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64/postrm:      stop_server
tmp/tracker-miner-fs_0.16.4-0ubuntu0.1_amd64/postinst:        if [ -x /etc/init.d/procps ]; then
tmp/tracker-miner-fs_0.16.4-0ubuntu0.1_amd64/postinst:            invoke-rc.d procps start || true
1
ответ дан 24 May 2018 в 06:33
  • 1
    Спасибо, это звучит надежный способ сделать это, но мне придется принять ответ от Pabi, поскольку он намного проще и короче. Спасибо хоть. – Luke Cousins 18 June 2014 в 19:47

Другие вопросы по тегам:

Похожие вопросы: