Если я запускаю sudo apt-get upgrade
, то мне показывают список пакетов, и, если какие-то из них являются службами, их, возможно, потребуется перезапустить (что делается автоматически при установке обновлений). Как я могу определить, потребуется ли для одного из этих пакетов перезапуск службы, например, если я обновлю пакет, который не называется mysql*
, я хотел бы знать перед установкой обновлений, что это может вызвать перезапуск служба mysql (если пакет называется mysql*
, я предполагаю, что требуется перезапуск службы). Или этого никогда не происходит? Если потребуется перезапуск службы mysql, я удалю этот узел из пулов подсистемы балансировки нагрузки и разрешу всем соединениям с ним завершиться перед установкой обновлений.
Просто чтобы уточнить, я имею в виду перезапуск служб, а не перезагрузку всей машины.
Спасибо за вашу помощь.
Используйте флаг-s:
-s, --simulate, --just-print, --dry-run, --recon, --no-act
No action. Perform a simulation of events that would occur but do not actually change the system.
Просто вывод печатается, Вы видите, перезапустил ли он сервис там.
Один путь состоит в том, чтобы проверить их пакет 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
& postrm
сценарии:
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