お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
OS::Linux::Ubuntu

WSL2環境などでinit.dを書かざるを得ないときのために。

確認環境

Ubuntu 22.04.5 LTS

書き方

細かいことは書いていないので適当に解釈すること。

  1. /etc/init.dに所有者root、パーミッション755とかでサービス名のファイルを作成
  2. 作成したファイルに以下のようなコードを書く

    #! /usr/bin/env bash
    ### BEGIN INIT INFO
    # Provides:          gitea
    # Required-Start:    $syslog $network
    # Required-Stop:     $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: A self-hosted Git service written in Go.
    # Description:       A self-hosted Git service written in Go.
    ### END INIT INFO
    
    # Do NOT "set -e"
    
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    DESC="Gitea - Git with a cup of tea"
    NAME=gitea
    SERVICEVERBOSE=yes
    PIDFILE=/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    WORKINGDIR=/var/lib/$NAME
    DAEMON=/usr/local/bin/$NAME
    DAEMON_ARGS="web -c /etc/$NAME/app.ini"
    USER=git
    STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/1/KILL/5}"
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    do_start()
    {
        GITEA_ENVS="USER=$USER GITEA_WORK_DIR=$WORKINGDIR HOME=/home/$USER"
        GITEA_EXEC="$DAEMON -- $DAEMON_ARGS"
        sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
            --background --chdir $WORKINGDIR --chuid $USER \\
            --exec /bin/bash -- -c '/usr/bin/env $GITEA_ENVS $GITEA_EXEC'"
    }
    
    do_stop()
    {
        start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PIDFILE --name $NAME --oknodo
        rm -f $PIDFILE
    }
    
    do_status()
    {
        if [ -f $PIDFILE ]; then
            if kill -0 $(cat "$PIDFILE"); then
                echo "$NAME is running, PID is $(cat $PIDFILE)"
            else
                echo "$NAME process is dead, but pidfile exists"
            fi
        else
            echo "$NAME is not running"
        fi
    }
    
    case "$1" in
        start)
            echo "Starting $DESC" "$NAME"
            do_start
            ;;
        stop)
            echo "Stopping $DESC" "$NAME"
            do_stop
            ;;
        status)
            do_status
            ;;
        restart)
            echo "Restarting $DESC" "$NAME"
            do_stop
            do_start
            ;;
        *)
            echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
            exit 2
            ;;
    esac
    
    exit 0
    
  3. 後は条件分岐に書かれているコマンドに沿ってserviceを蹴れば動くようになる。止めたりするときはinit.dに定義したものを使う(init.dそのものは単にコマンド名で分岐処理しているだけ)
    sudo service <作成したファイル名> start