dpkg移除以停止进程



我目前正在运行Ubuntu 12.04。我已经创建了一个debian包,该包目前已成功安装并启动了三个新进程。我还通过在/etc/init.d:中放置以下脚本,使这三个进程在运行时启动

# This example is from http://www.debian-administration.org/article/Making_scripts_run_at_boot_time_with_Debian
#  Also used http://wiki.debian.org/LSBInitScripts/
### BEGIN INIT INFO
# Provides:          bleh
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    cd //opt/bleh
    attrf=.gatewayattributes
    if [ ! -z "$1" ]
    then
  echo "[gateway]" >> $attrf
    echo "activationKey = $1" >> $attrf
fi
./bleh1 -n &
./bleh2 &
python bleh3 &
    ;;
  stop)
cd //opt/bleh
/usr/bin/pkill -f ./bleh1 -n
    /usr/bin/pkill -f bleh3
    kill -9 $(pidof bleh2)
    rm -rf logs
    ;;

这个脚本确实在运行时启动了这三个进程,但由于某种原因,我实际上无法使用启动/停止命令,就像在sudo/etc/init.dbleh.sh stop中一样。

更大的问题是使用以下命令删除此程序包:sudo dpkg-r bleh

实际上并没有停止这三个进程,它只是试图删除我安装在opt文件夹中的bleh目录。此外,我的bleh目录中有一个文件夹没有被删除,它会给我一个警告:正在删除气泡。。。dpkg:警告:删除bleh时,目录"/opt/bleh/logs"不为空,因此未删除。

日志目录中的文件是只读的,除非你有SU特权,但我不认为这会有什么问题,因为我正在用dpkg-r命令调用sudo。

如果我再次运行sudo dpkg-r bleh,它会声明没有与bleh匹配的已安装程序包,这意味着它认为它已经成功删除了已安装的程序包,即使有现有的日志目录和仍在运行的三个进程。

对不起,我知道时间很长,但我真的需要一些帮助。。提前感谢!

根据Debian New Maintainer's Guide的建议,请使用dh_installinit(当然,使用debhelper构建整个包)。默认情况下,这将添加脚本,以便在安装和删除包时启动和停止。

辅助文件(如配置)通常在purge(如dpkg -P)状态下删除。要自己处理这个问题,您需要一个deconfigure脚本。

此外,非常优选使用start-stop-daemon而不是&,这不足以进行适当的守护程序化。

最新更新