我目前正在运行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
而不是&
,这不足以进行适当的守护程序化。