web-dev-qa-db-ja.com

No-IPを適切なサービスとして設定するにはどうすればよいですか?

ダウンロードにはサンプルのサービスシェルスクリプトがありますが、制限されているようであり、Ubuntu 16 LTSにはデフォルトでは存在しないkillprocに依存しています。

3
Walf

Ubuntu 16 LTSはsystemdを初期化システムとして使用します。これは、noip2アップデートクライアントが既にダウンロードおよびインストールされていることを前提としています。

  1. 次のようにファイル/etc/systemd/system/noip2.serviceを作成します。

    [Unit]
    Description=No-Ip Dynamic DNS Update Service
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/bin/noip2
    
    [Install]
    WantedBy=multi-user.target
    
  2. Initデーモンをリロードします。

    Sudo systemctl daemon-reload
    
  3. サービスを有効にします。

    Sudo systemctl enable noip2
    
  4. サービスを開始します。

    Sudo systemctl start noip2
    

this readme から派生

8
mrtumnus

sysvinit Jonas Friedmannのガイド を使用しました。

  1. No-IP DUCをダウンロードして展開します。
    wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz
    tar -xf noip-duc-linux.tar.gz --exclude='._*'(Macドットファイルを除く)
  2. 作成してインストールします。
    cd noip-x.y((x.yはバージョンです)
    make(ここでのエラーは、コンパイルパッケージが欠落していることを意味する場合があります)
    Sudo make install
  3. 次の内容のファイル/etc/init.d/noipを作成します。

    #!/bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          noip
    # Required-Start:    $local_fs $network $syslog
    # Required-Stop:     $local_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: no-ip DUC
    # Description:       Update DNS for dynamic IP on noip.com
    ### END INIT INFO
    
    NAME="noip"
    PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
    APPDIR="/"
    APPBIN="/usr/local/bin/noip2"
    PIDFILE="/var/run/${NAME}-customservice.pid"
    
    # Include functions 
    set -e
    . /lib/lsb/init-functions
    
    start() {
        printf "Starting '$NAME'... "
        start-stop-daemon --start --background --make-pidfile --pidfile "$PIDFILE" --chdir "$APPDIR" --exec "$APPBIN" || true
        printf "done\n"
    }
    
    #We need this function to ensure the whole process tree will be killed
    killtree() {
        local _pid=$1
        local _sig=${2-TERM}
        for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
            killtree ${_child} ${_sig}
        done
        kill -${_sig} ${_pid}
    }
    
    stop() {
        printf "Stopping '$NAME'... "
        [ -z `cat "$PIDFILE" 2>/dev/null` ] || \
            while test -d /proc/$(cat "$PIDFILE"); do
                killtree $(cat "$PIDFILE") 15
                sleep 0.5
            done 
        [ -z `cat "$PIDFILE" 2>/dev/null` ] || rm "$PIDFILE"
        printf "done\n"
    }
    
    status() {
        "$APPBIN" -S
    }
    
    configure() {
        "$APPBIN" -C
    }
    
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            stop
            start
            ;;
        status)
            status
            ;;
        configure)
            configure
            ;;
        *)
            echo "Usage: $NAME {start|stop|restart|status|configure}" >&2
            exit 1
            ;;
    esac
    
    exit 0
    

    Sudo vim /etc/init.d/noipを使用しました。)

  4. 実行可能にする:
    Sudo chmod a+x /etc/init.d/noip
  5. 有効にします:
    Sudo update-rc.d noip defaults
  6. それを構成します。
    Sudo service noip configure
  7. 始めよう:
    Sudo service noip start
  8. 確認してください:
    Sudo service noip status

フィードバックは大歓迎です。

2
Walf