![如何在不停止服务的情况下删除提供服务的软件包?](https://linux22.com/image/859485/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%81%9C%E6%AD%A2%E6%9C%8D%E5%8A%A1%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%88%A0%E9%99%A4%E6%8F%90%E4%BE%9B%E6%9C%8D%E5%8A%A1%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
我目前有uwsgi软件包已安装。我想删除该软件包但保留当前 uWSGI 实例运行。这可能吗?
(是的,我确实知道该服务将持续运行,直到它停止或服务器重新启动。)
答案1
脚本包含以下prerm
内容uwsgi
:
#!/bin/sh
set -e
# Automatically added by dh_installinit
if [ -x "/etc/init.d/uwsgi" ] || [ -e "/etc/init/uwsgi.conf" ]; then
invoke-rc.d uwsgi stop || exit $?
fi
# End automatically added section
您有以下几种选择:
编辑prerm
脚本。
该脚本通常位于/var/lib/dpkg/uwsgi.prerm
。请执行以下操作:
sudo sed -i '/invoke-rc.d/ s/^/#/' /var/lib/dpkg/uwsgi.prerm
注释掉停止服务的命令。
利用脚本中的条件
任何一个:
sudo chmod -x /etc/init.d/uwsgi
由于脚本检查该脚本的执行权限,
或者:
mv /etc/init/uwsgi.conf /etc/init/uwsgi.conf.bak
因为脚本会检查这个 Upstart 服务文件是否存在。
根据文件列表,该软件包中有/etc/init.d/uwsgi
,但没有 Upstart 脚本。
(滥用policy-rc.d
invoke-rc.d
控制者policy-rc.d
。但是,直接使用它有一个问题。prerm
脚本有exit $?
,并且dpkg
不喜欢非零退出代码。因此,这仍然需要更改脚本prerm
:
echo 'exit 101' > /usr/sbin/invoke-rc.d
chmod +x /usr/sbin/invoke-rc.d
sed 's/exit/echo/' -i /var/lib/dpkg/uwsgi.prerm
我为什么要回答?
目前已经有一些精彩的答案:安装软件包而不启动后台进程和服务(可能需要进行一些轻微的调整)。
答案2
你可以保持安装的软件包直到关机。这将完成相对相同的事情。
以 root 身份运行此命令来执行此操作:
echo "sudo apt-get remove uwsgi" > /etc/rc6.d/K99_script
其次是:
chmod +x K99_script
当您关机时,该包将自动被卸载。
但请注意,系统恢复后,您应该删除 K99 脚本文件。