ARKサーバーをサービスにしておく備忘録

# ARKサーバーをログオフしても起動しておく
Screenにするのもいいけど、サービスにしておけばいいので、そのやり方を書いておきます。
Virtual BOX上でUbuntuをインストールし、実行できることを確認しています。

環境
```text
cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```
ユーザーは"ark"

以下の起動オプションをサービスにします。
```text
./ShooterGameServer TheIsland?listen?SessionName=hogehogeServer?ServerPassword=Password?ServerAdminPassword=AdminPassword -server -log
```

sudoできるユーザーでサービスを追加します。
```text
sudo nano /lib/systemd/system/arkserver.service
```

以下の内容を記入します。
```text
[unit]
## サービスの説明を記載する。
Description=ARK: Survival Evolved dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
Type=simple
Restart=no
StartLimitBurst=3

## 実行時ユーザー名とグループを指定する
User=ark
Group=ark

## サーバー起動前にアップデートをする。force_install_dirは環境に応じて変更する。
ExecStartPre=/usr/games/steamcmd +force_install_dir "/home/ark/arkserver" +login anonymous +app_update 376030 +quit

## サーバーを起動する。ここの起動オプションは環境に応じて変更する。
ExecStart=/home/ark/arkserver/ShooterGame/Binaries/Linux/ShooterGameServer TheIsland?listen?SessionName=hogehogeServer?ServerPassword=Password?ServerAdminPassword=AdminPassword -server -log

LimitNOFILE=100000

## 作業ディレクトリを指定する。実際にARKサーバープログラムがあるディレクトリをフルパスで指定する。
WorkingDirectory=/home/ark/arkserver/ShooterGame/Binaries/Linux

## サービスをリロードするときのコマンド
ExecReload=/bin/kill -s HUP $MAINPID

## サービスをストップするときのコマンド
ExecStop=/bin/kill -s INT $MAINPID

[Install]
WantedBy=multi-user.target
```

保存後、サービスを起動します。以下のコマンドを使用します。
```text
## systemdを再読み込みする
sudo systemctl daemon-reload
## サービス有効化（システム起動時にプロセス実行）
sudo systemctl enable arkserver
## サービス実行
sudo systemctl start arkserver
## 確認
sudo systemctl status arkserver
```
sudo systemctl status arkserverの結果がだいたい以下のようであれば無事起動しています。
（Active: active (running)であれば基本OK）
```text
● arkserver.service
     Loaded: loaded (/lib/systemd/system/arkserver.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-11 17:02:30 UTC; 1min 8s ago
    Process: 2198 ExecStartPre=/usr/games/steamcmd +force_install_dir /home/ark/arkserver +login anonymous +app_update 376030 +quit (code=exited, status=0/SUCCESS)
   Main PID: 2219 (ShooterGameServ)
      Tasks: 17 (limit: 19068)
     Memory: 4.9G
        CPU: 1min 11.474s
     CGroup: /system.slice/arkserver.service
             mq2219 /home/ark/arkserver/ShooterGame/Binaries/Linux/ShooterGameServer "TheIsland?listen?SessionName=hogehogeServer?ServerPassword=Password?ServerAdminPassword=AdminPassword" -server -log

Sep 11 17:02:27 manjutest steamcmd[2202]: Steam Console Client (c) Valve Corporation - version 1660762488
Sep 11 17:02:27 manjutest steamcmd[2202]: -- type 'quit' to exit --
Sep 11 17:02:27 manjutest steamcmd[2202]: Loading Steam API...OK
Sep 11 17:02:29 manjutest steamcmd[2202]: Connecting anonymously to Steam Public...OK
Sep 11 17:02:29 manjutest steamcmd[2202]: Waiting for client config...OK
Sep 11 17:02:30 manjutest steamcmd[2202]: Waiting for user info...OK
Sep 11 17:02:30 manjutest steamcmd[2202]: Success! App '376030' already up to date.
Sep 11 17:02:30 manjutest systemd[1]: Started arkserver.service.
Sep 11 17:02:30 manjutest ShooterGameServer[2219]: [S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
Sep 11 17:02:30 manjutest ShooterGameServer[2219]: Setting breakpad minidump AppID = 346110
```
実際にSteamからサーバーの応答があることを確認できれば完了です。
アップデートがあった場合以下のようにすることで自動でサーバーを停止してアップデートして起動してくれるはずです。
```text
sudo systemctl restart arkserver
```
何かございましたらコメントを残してくれると幸いです。
以上です。