2

現在、Ubuntu 12.04 を実行しています。現在正常にインストールされ、3 つの新しいプロセスを開始する debian パッケージを作成しました。また、/etc/init.d 内に次のスクリプトを配置して、これら 3 つのプロセスを実行時に開始するようにしました。

# 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
    ;;

このスクリプトは実行時に 3 つのプロセスを開始しますが、何らかの理由で、sudo /etc/init.d bleh.sh stop のように開始/停止コマンドを実際に使用できません。

さらに大きな問題は、次のコマンドを使用してこのパッケージを削除することです: sudo dpkg -r bleh

3 つのプロセスを実際に停止するわけではなく、opt フォルダーにインストールした bleh ディレクトリを削除しようとするだけです。また、bleh ディレクトリ内に削除されないフォルダーがあり、次のような警告が表示されます。 .

そのログ ディレクトリ内のファイルは、SU 特権を持っていない限り読み取り専用ですが、その dpkg -r コマンドで sudo を呼び出しているので、それがどのように問題になるかわかりません。

sudo dpkg -r bleh を再度実行すると、bleh に一致するインストール済みパッケージがないと表示されます。つまり、既存のログ ディレクトリと 3 つのプロセスがまだ実行されていても、インストール済みパッケージが正常に削除されたと見なされます。

申し訳ありませんが、これが長くなったことは知っていますが、本当に助けが必要です.. 事前に感謝します!

4

1 に答える 1

2

Debian New Maintainer's Guideで推奨されているように、使用してくださいdh_installinit(もちろん、debhelperを使用してパッケージ全体をビルドします)。デフォルトでは、これにより、パッケージのインストールと削除時に開始および停止するスクリプトが追加されます。

補助ファイル(構成など)は通常、purge(例dpkg -P)状態で削除されます。これを自分で処理するには、deconfigureスクリプトが必要です。

また、適切なデーモン化には不十分なstart-stop-daemonの代わりに使用することを強くお勧めします。&

于 2012-08-27T19:55:59.187 に答える