コンテンツにスキップ

サービスを Bash スクリプトで管理する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash

# 使い方
#
# example_serviceを有効にする
# ./service.sh i example_service
#
# example_serviceを無効にする
# ./service.sh rm example_service

COMMAND=$1
NAME=$2

SERVICE_EXISTS=$(test -f "$NAME.service" && echo 1 || echo 0)
TIMER_EXISTS=$(test -f "$NAME.timer" && echo 1 || echo 0)

if [ $SERVICE_EXISTS = 0 ]; then
    # serviceファイルが存在しなかったらエラーを返す
    echo "Service \"$NAME\" not found"
    exit 1
fi

if [ "$COMMAND" == "i" ]; then
    echo Install $SERVICE_NAME

    # serviceファイルをコピーする
    sudo cp $NAME.service /etc/systemd/system
    if [ $TIMER_EXISTS = 1 ]; then
        # timerファイルが存在すればそれもコピーする
        sudo cp $NAME.timer /etc/systemd/system
    fi

    # デーモンに変更を通知する
    sudo systemctl daemon-reload

    # serviceを有効にする
    sudo systemctl enable $NAME.service
    if [ $TIMER_EXISTS = 1 ]; then
        # timerファイルが存在すればそれも有効にする
        sudo systemctl enable $NAME.timer
    fi

    # timerを開始する
    sudo systemctl start $NAME.timer
    exit 0
elif [ "$COMMAND" == "rm" ]; then
    echo Uninstall $SERVICE_NAME

    TIMER_FILEPATH=/etc/systemd/system/$NAME.timer
    SERVICE_FILEPATH=/etc/systemd/system/$NAME.service

    if [ -f $TIMER_FILEPATH ]; then
        # timerファイルがあれば停止して削除する
        sudo systemctl stop $NAME.timer
        sudo systemctl disable $NAME.timer
        sudo rm $TIMER_FILEPATH
    fi
    if [ -f $SERVICE_FILEPATH ]; then
        # serviceファイルがあれば停止して削除する
        sudo systemctl disable $NAME.service
        sudo rm $SERVICE_FILEPATH
    fi

    # デーモンに変更を通知する
    sudo systemctl daemon-reload
    exit 0
fi