Linuxマシンを任意の時間の間シャットダウンする(ゲームサーバー)

ARK用のサーバーを建てた時に、誰も入っていない昼間にサーバーが動き続けているのは電力の無駄だし、管理が面倒ですよね。 また、ある程度の頻度でアップデートをかける必要があります。

でもいちいち手動でシャットダウン・起動をするのもスマートじゃない。

なので設定した時間の間、サーバーの電源が切れるようにしました。 Linux標準のcronとBIOSの設定だけなので比較的簡単です。

自分がARKように建てたサーバーで行っているのでARKを例にしていますが、Minecraftとか、他のゲームサーバーにも使えると思います。

目次

  1. ARKサーバーシステムの自動起動の確認
  2. 時間を指定してシャットダウンする
  3. 時間を指定してマシンを立ち上げる

1.ARKサーバーシステムの自動起動の確認

まずはcystemdを用いたサーバーの自動設定が正常に起動するか確認しておきます。

マシンの電源が入ったら自動でサーバーが起動することが前提です。

$ sudo shutdown shutdown -h now
(マシンの再起動)
$ sudo systemctl status ark-dedicated.service
● ark-dedicated.service
   Loaded: loaded (/etc/systemd/system/ark-dedicated.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-19 14:12:38 JST; 17s ago
  Process: 773 ExecStartPre=/home/username/steam/steamcmd.sh +login anonymous +force_install_dir ark +app_update 376030 +quit (code=exit
 Main PID: 1586 (ShooterGameServ)
    Tasks: 12 (limit: 4915)

私のark用サーバーはこんな感じでリブートかけたらサーバーも起動します。

起動に失敗する場合

設定が正しくできていてもSteamへの接続がうまくいかず、タイムアウトすることが割と頻繁にあります。

$ sudo systemctl status ark-dedicated.service
● ark-dedicated.service
   Loaded: loaded (/etc/systemd/system/ark-dedicated.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Wed 2020-03-18 18:15:03 JST; 5s ago
  Process: 1677 ExecStartPre=/home/username/steam/steamcmd.sh +login anonymous +force_install_dir ark +app_update 376030 +quit (code=kil

 3月 18 18:13:34 ubuntu-username steamcmd.sh[1677]: Failed to set thread priority: per-thread setup failed
 3月 18 18:13:34 ubuntu-username steamcmd.sh[1677]: OK.
 3月 18 18:14:49 ubuntu-username steamcmd.sh[1677]: Connecting anonymously to Steam Public...Retrying. . .
 3月 18 18:14:49 ubuntu-username steamcmd.sh[1677]: Loaded client id: 8524229496731347362
 3月 18 18:14:49 ubuntu-username steamcmd.sh[1677]: Listening for IPv4 broadcast on: 27036
 3月 18 18:14:49 ubuntu-username steamcmd.sh[1677]: Logged in OK
 3月 18 18:15:03 ubuntu-username systemd[1]: ark-dedicated.service: Start-pre operation timed out. Terminating.
 3月 18 18:15:03 ubuntu-username steamcmd.sh[1677]: Waiting for user info...
 3月 18 18:15:03 ubuntu-username systemd[1]: ark-dedicated.service: Failed with result 'timeout'.
 3月 18 18:15:03 ubuntu-username systemd[1]: Failed to start ark-dedicated.service.

その場合は少し待ってから再実行しましょう。

$ sudo systemctl start ark-dedicated.service

2.時間を指定してシャットダウンする

Linux標準のcronコマンドを使えば時間を指定してシャットダウンすることができます。

cron(crontab)とは、分・時・月・曜日を指定して定期的に実行してくれる機能です。 shutdownコマンドを実行するためにrootになりまして、crontabに追記します。 この時インストールされているエディタからどのエディタで開くか選択できます。私はemacsです。

$ sudo su -
# crontab -e

エディタが開いたら時間とコマンドを書き込んであげれば完了です。

例)毎日12時にシャットダウンするようにするコマンド

0 12 * * * root /sbin/shutdown -h now

crontab内に詳しい書き方がコメントで書いてあるんで参考にしてください。

最後に設定を反映させます。

# /etc/init.d/cron start

追記 30分おきにサーバーがセーブを行うようにしているのですが、セーブ処理中にシャットダウンしないように3分ほど遅らせた方がいいんじゃないかと思い始めました。

3.時間を指定してマシンを立ち上げる

残念ながら完全にOSも電源を切ったシャットダウン状態から回復するコマンドはないと思います。多分。

S4あるいはハイバネーションと呼ばれるほぼシャットダウンのような状態からなら復帰できるんですけど、それだと中途半端です。 せっかくなら前節の通り完全にシャットダウンから復帰させたい。

そこで使えるのがBIOS設定です。大体のBIOSには「指定した時間にマザボに通電してあれば起動を試みる」設定があります。 それを使います。

BIOS画面にて、”APM”となのつく設定を探してみてください。 わからなければ「マザーボードのメーカー名+ BIOS + 自動起動」で検索。 windowsLinuxも一緒です。 時間を指定して電源ボタンを自分で押してもらってるわけですから。

注意して欲しいのは、マザボの時刻はグリニッジ標準時のことが多いです。

おまけ

cronの設定ですが、なぜか稀に失敗することがあるんですよね... ふとみた時に起動したままだったりして悲しくなります。これは私の環境だけなのか、設定がおかしいのか教えて欲しいです。

Steamへの接続が失敗した場合に時間をおいて再起動ってしたいですね。 来週あたり暇ならやります。

ARK:Survival Evolved 用自宅サーバー構築メモ

いわゆるLinux自宅サーバーです。初心者が書いたので初心者向けです。

ホロライブなどVtuberの方達はじめ、配信者の方達ARK楽しそうですよね。あなたもやりたくなりますよね。鯖立てよう。

ubuntuのインストールからサーバーの公開まで メモも兼ねて書いておきます。 基本的にはこちらのサイトがよくまとまっていて参考になります。

 

試す場合は、一度軽く全体を読んでからやることをお勧めします。 ポート 解放など、環境によってはできない場合もあります。

※自己責任でお願いします。 

目次

1.サーバーのスペック

2.ubuntuのインストール

3.ポート解放

4.ファイルオープン上限の設定

5.steamCMDとARKのダウンロード

6.ARKの起動

7.systemctlで自動起動

8.セーブデータ、サーバー設定など

9.おまけ

 

1.サーバーのスペック

ARKのサーバーを起動するためにはメモリが最低6GB必要とのこと。自分の環境では常時7GB程度使用しています。

 

 接続人数6人で安定して動作しています。

CPU使用率は30%くらいで余裕があります。  

2.ubuntuのインストール

USBを用いてインストールしました。 参考サイト

そのコマンドないよって言われたらググって

sudo apt-get install (入れたいコマンド )

しましょう。

インストール後、sshを入れてwindows/macで操作しています。 私のエディタはダサいと言われようがemacsです。  

3.ポート解放

ポート解放が行えるインターネット契約であることを確認してください。

ゲーマーなら知ってるかと思いますが一部のjcom、なんとかairはできません。その場合はレンタルサーバーなどを使ってください。

 

解放するポートは以下の通りです。

 

ルーターubuntuの両方で必要になります。

 

ルーター側(自分の場合)

ブラウザでルーターにログインする。(多分192.168.1.1)

サーバーを外部に公開

サーバーのアドレスにubuntuipアドレスを入力

上記のポートを選択

 

ubuntu

ubuntuのポート解放は、先にufwでファイアーウォールの設定が有効になっていることを確認した方が良さげです。セキュリティー的にもそうですし、有効でないとサーバーに自分以外入れなかったです。

ファイアウォール設定の確認

$ sudo ufw status

 ファイアウォールの有効・無効

$ sudo ufw enable
$ sudo ufw disable

ポートの解放、設定の更新、確認

$ firewall-cmd --permanent --add-port=27015/udp
$ firewall-cmd --permanent --add-port=7777/udp
$ firewall-cmd --permanent --add-port=7778/udp
$ firewall-cmd --permanent --add-port=27020/tcp
$ firewall-cmd --reload
$ sudo ufw reload
$ sudo ufw status

 

4.ファイルオープン上限の設定

arkサーバーのファイルオープン数が、ubuntuのデフォルトの制限値よりも大きいライしいので、上限を上げる必要があります。

まずは設定ファイルを開いて、

$ emacs /etc/sysctl.conf

以下を追記します。

fs.file-max=100000

設定を反映させます。

$ sysctl -p /etc/sysctl.conf

次に1プロセスの上限数も変更します。同様にファイルを開き、

$ emacs /etc/security/limits.conf

以下を追記してください。

* soft nofile 1000000
* hard nofile 1000000

設定の反映

sysctl -p /etc/slimits.conf

5.steamCMDとARKのダウンロード

steamのゲームなんでsteamを使ってインストールします。

32ビット用バイナリのインストール

steamCMDは32ビットで動作しているので64ビットのマシンを使っている場合は以下のインストールが必要になるそうです。 yumのインストールしていなければしておいてください。

$ sudo yum install -y glibc.i686 libstdc++.i686
steamCMDのダウンロード

ダウンロードディレクトリを作ってそこにcurlで持ってきます。

$ cd
$ mkdir steam
$ cd steam
$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

ARKのダウンロード

steamCMDを起動して匿名ログイン。インストールディレクトリ"ark"を指定してサーバーをインストールします。

$ ./steamcmd.sh
>Steam login anonymous
>Steam force_install_dir ark
>Steam app_update 376030 validate
>Steam exit

これでサーバーの起動ができます。

7.ARKの起動

arkの起動コマンドは以下の通りです。

$cd steam/ark/ShooterGame/Binaries/Linux/
$./ShooterGameServer <マップの指定>?listen?SessionName=<セッションの名前(サーバーブラウザ上で表示される名前)>?ServerPassword=<入室パスワード>?ServerAdminPassword=<管理者用パスワード> -server -log

<>内を適宜書き換えてください。 マップはTheIsland、TheCenter、Ragnarokなど。

設定ファイルなどは steam/ark/ShooterGame/Saved に初回起動後作成されます。

起動時に

[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.

というエラーが表示されることがありますがサーバーの動作には関係しないので無視して大丈夫です。

8.systemctlで自動起動

このままでも十分サーバーとして機能しますが、サーバーが動いている間、他のことができないですし、何かと不便なのでsystemdを用いて自動で起動できるようにすると便利です。 こちらを参考に

9.セーブデータ、サーバー設定など

ゲームのセーブデータ及び設定ファイルは steam/ark/ShooterGame/Saved に生成されます。

デフォルトで15分おきにワールドの保存が行われます。他にも参加ユーザーごとにセーブファイルが生成されます。

設定は海外wikiを参照したり、配布ファイルを使ったり、Ark Server Manager(略称:ASM)で生成後サーバーに移すなどで行えます。 windowsで作成したファイルは文字コードや改行に注意してください。

置く場所は、steam/ark/ShooterGame/Saved/Config/LinuxServer 内です。

10.おまけ

htopをインストールして使うと、サーバーマシンのCPUやメモリ、動いているプログラムなどリアルタイムに観察できます。 見た目もかっこいいので有能感に浸れて最高です。是非サーバーが動いている時に眺めてみてください。

それから、サーバー上から管理者コマンドって使えないんですかね。minecraftみたいに。 知ってる方いらっしゃいましたら教えてください。