- 投稿日:2020-08-18T19:52:32+09:00
【minecraftサーバ】MOD・プラグイン不要!!自動バックアップ+再起動システム
シェルによるバックアップシステム
Minecraftのサーバを運営していて
定期的にバックアップと再起動をしたいと思って作りました。minecraft内での処理ではなくシェルスクリプトを使いOS側から操作することにより
MODやプラグイン無しでも動作します。自分のために忘れないように記事にします
※あくまで自忘禄です。これにより不具合やトラブルが発生しても、当方責任は取りません。
条件
この記事では以下の条件での作成をしています。
- Linuxサーバーであること。(Windowsでもbatを使えばおそらく可能)
- Forge ServerでもBukkit Serverでも問題ありません。
- 全てのバージョンに対応しています
※この記事はCentOS7向けに書いております。
他でもおそらく可能ですが、コマンドが一部違う部分があると思うので、置き換えてください。事前準備
サーバーのプロセスを
screen
環境で動かしていた方が何かと都合がいいのでscreen
が入っていない場合はインストールをします。# yum -y install screenrootユーザかsudoで実行してください。
次にバックアップデータを保存しておくディレクトリを作ります。
場所及びディレクトリ名は自由です。(Minecraftサーバのworldディレクトリ内だけ避けてください)$ mkdir backupシェルスクリプト
今回のメインとなるプログラムです。
まずは自分の好きな場所にシェルを作りましょう。
以下マイクラサーバと同じユーザで行ってください。
viエディタの使い方$ vi backup.sh↓コピペ↓(※ファイルのパスだけ書き換え必要)
backup.sh#!/bin/bash # #マイクラのバックアップ自動作成スクリプト #######ゲーム中の人のためにメッセージを送ります。####### time1=60 #この数字をいじることで再起動までの時間を調整可能 screen -S minecraft -X stuff 'say §a§l§n自動アナウンス'`echo -ne '\015'` screen -S minecraft -X stuff 'say §b'$time1'§秒後に§lバックアップ§6及び§l再起動§6を行います。'`echo -ne '\015'` time2=`expr $time1 - 10` sleep `expr $time2` screen -S minecraft -X stuff 'say §cまもなくサーバーが自動停止します。'`echo -ne '\015'` sleep 10 screen -S minecraft -X stuff 'stop'`echo -ne '\015'` #minecraft終了 ########## minecarftが完全に終了するまで待機 ########## #javaのプロセス数を数えてるため #ほかにjavaを動かしていたら調整してください count1=`ps -ef | grep java | grep -v grep | wc -l` while : do if [ $count1 = 0 ] ; then break else sleep 0.5 count1=`ps -ef | grep java | grep -v grep | wc -l` fi done ############## バックアップ開始 ################# #ワールドディレクトリのコピー cp マイクラのパス/world バックアップディレクトリのパス/backup #zipに圧縮 zip バックアップディレクトリのパス/backup/world バックアップディレクトリのパス/backup #ファイル名に日付を付ける cp -aiv バックアップディレクトリのパス/backup/world.zip バックアップディレクトリのパス/backup/world.`date "+%Y%m%d_%H%M"`.zip #いらないものを消す rm -rf バックアップディレクトリのパス/backup/world rm バックアップディレクトリのパス/backup/world.zip ############# minecraft再起動 ############## screen -S minecraft -X stuff 'java -Xmx4096M -Xms1024M -jar サーバーjarの絶対パス(例/home/User/Minecraft/server.jar) nogui'`echo -ne '\015'` #javaの引数は任意細かな調整は各自お願いします。
実行できるように権限を付与します
$ chmod 744 backup.shサーバーの起動
コマンドを送ったりする関係上サーバはscreen上で起動します。←ここ重要
screenは仮想デスクトップみたいなものです。
minecraftという名前のscreenを起動します。$ screen -S minecraft既にminecraftというscreenが起動している場合はアタッチします。
$ screen -r minecraftscreen内でMinecraft Serverを実行します。
シェルからでもコマンドからでも
↓コマンドの場合$ cd マイクラサーバのパス $ java -Xmx4096M -Xms1024M -jar server.jar noguiこれでサーバーがいつも通り起動すると思うのでデタッチします。
Ctrlキー
+aキー
を押した後にdキー
を押す。するとLinuxのコマンドラインに戻ってきますが、裏ではマイクラのサーバが動いています。
マイクラのコンソールに戻りたいときは上記のアタッチをしてくださいバックアップの実行
screenをデタッチした状態でシェルを実行します。
$ ./backup.shマイクラ内にメッセージが出現して
自動停止→バックアップ→自動起動が行われれば成功です。
このようにバックファイルデータが作成されます。
バックアップの復旧はzipを解凍後worldディレクトリと置き換えてください。以上で終了です。
お疲れさまでした。応用編
24時間サーバー向け 定時実行
毎日一定の時間に自動実行することが可能です。
そのためにcron
を使用します。CentOSには既にcronが入っているはずですが、入っていなかったらインストールします。
# yum -y install crontabsクーロンを作成します。マイクラサーバと同じユーザで行ってください
$ crontab -eviエディタが起動します
以下例です。
例えば、AM6:00とPM4時に実行かけたかったとするとcrontab0 6,16 * * * /home/User/backup.sh(backup.shの絶対パス)と、記述します。
詳しくはこちらの記事が優良なのでご覧ください。
- 投稿日:2020-08-18T18:06:01+09:00
Ubuntu20.04にプリザンターをインストール(.NetCore3.1/PostgreSQL版)
Ubuntuに.NETCore3.1版のプリザンターをインストールしようと思ったが、
公式ページにはRHEL/CentOSのインストール方法しか無かったためやってみた。Pleasanter with PostgreSQLをRHEL8/CentOS8にインストールする
https://pleasanter.net/fs/publishes/1490231/edit.NET Core 3.1をインストール
$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb $ sudo dpkg -i packages-microsoft-prod.deb $ sudo apt update $ sudo apt install -y apt-transport-https $ sudo apt update $ sudo apt install -y dotnet-sdk-3.1 $ sudo apt install -y libgdiplusPostgreSQL12のインストール
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-add-repository 'deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main' $ sudo vi /etc/apt/sources.list deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main ↓ deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt focal-pgdg main $ sudo apt update $ sudo apt install postgresql-12 pgadmin4 postgresql-contrib # 成功しました。以下のようにしてデータベースサーバを起動することができます: # # pg_ctlcluster 12 main start # # Ver Cluster Port Status Owner Data directory Log file # 12 main 5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.logログ出力設定
以下を設定します。
$ sudo vi /etc/postgresql/12/main/postgresql.conf log_destination = 'stderr' logging_collector = on log_line_prefix = '[%t]%u %d %p[%l]'ユーザー設定&DB作成
パスワードを設定後、PostgreSQLを起動
$ sudo passwd postgres $ su - postgres $ psql -U postgres postgres=# alter role postgres with password 'パスワード'; # DB作成 postgres=# create database "Implem.Pleasanter";全文検索用モジュール(pg_trgm)インストール
postgres=# \c "Implem.Pleasanter"; Implem.Pleasanter=# CREATE EXTENSION pg_trgm;プリザンターの導入
Pleasanterをダウンロードして、解凍
$ unzip Pleasanter.NetCore_1.1.5.1.zipDBの構成
pleasanter/Implem.Pleasanter/App_Data/Parameters/Rds.json を以下のように設定します。
{ "Dbms": "PostgreSQL", "Provider": "Local", "TimeZoneInfo": "Tokyo Standard Time", "SaConnectionString":"Server=localhost;Port=5432;Database=postgres;UID=postgres;PWD=<設定したパスワード>", "OwnerConnectionString":"Server=localhost;Port=5432;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD", "UserConnectionString":"Server=localhost;Port=5432;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD", "SqlCommandTimeOut": 600, "MinimumTime": 3, "DeadlockRetryCount": 4, "DeadlockRetryInterval": 1000 }Implem.CodeDefinerフォルダーに移動し、CodeDefinerを実行します。
$ cd pleasanter/Implem.CodeDefiner $ dotnet Implem.CodeDefiner.NetCore.dll _rds以下のコマンドでPleasnterを実行し、起動確認を行います。
$ cd ../Implem.Pleasanter $ dotnet Implem.Pleasanter.NetCore.dll別のターミナルで "http://localhost:5000/" にアクセスし、正常なレスポンスが帰ってくることを確認します。
$ curl -v http://localhost:5000/ * About to connect() to localhost port 5000 (#0) * Trying ::1... * Connected to localhost (::1) port 5000 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.29.0 > Host: localhost:5000 > Accept: */* > < HTTP/1.1 302 Found < Date: Mon, 25 May 2020 15:13:08 GMT < Server: Kestrel < Content-Length: 0 < Location: http://localhost:5000/users/login?ReturnUrl=%2F 確認できたらCtrl+Cで終了します。Pleasanterサービス用スクリプトの作成
$ sudo vi /etc/systemd/system/pleasanter.service [Unit] Description = Pleasanter Documentation = Wants=network.target After=network.target [Service] ExecStart = /usr/bin/dotnet Implem.Pleasanter.NetCore.dll WorkingDirectory = /home/hogehoge/pleasanter/Implem.Pleasanter Restart = always RestartSec = 10 KillSignal=SIGINT SyslogIdentifier=dotnet-pleasanter User = root Group = root Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy = multi-user.targetサービスとして登録・起動
$ sudo systemctl daemon-reload $ sudo systemctl enable pleasanter $ sudo systemctl start pleasanterNginx(Webサーバ)をインストール
$ sudo apt install nginx-extras $ sudo systemctl start nginx $ sudo systemctl enable nginx $ sudo addgroup ユーザー名 www-dataリバースプロキシの設定
/etc/nginx/conf.d/pleasanter.conf を以下の内容で作成します。
server { listen 80; server_name 192.168.0.200; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } $ sudo systemctl restart nginxここまでできたら、下記にアクセス。
http://192.168.0.200/参考
Pleasanter with PostgreSQLをRHEL8/CentOS8にインストールする
https://pleasanter.net/fs/publishes/1490231/editUbuntu 20.04 に .NET Core SDK 3.1 をインストールする
https://qiita.com/tabizou/items/d9af326ede9d35d03c68Ubuntu 20.04 に Posgtgres12 をインストール後 C# + Npgsql でアクセスしてみる
https://qiita.com/tabizou/items/47f395d7ab3030dd1915How To Install PostgreSQL on Ubuntu 20.04 [Quickstart]
https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstartPostgreSQL 12 のインストール,データベース作成,テーブル定義(Ubuntu 上)
https://www.kkaneko.jp/tools/postgresinstall/postgreslinux.html
- 投稿日:2020-08-18T16:58:22+09:00
俺的Linuxサーバーの建て方
毎度サーバーの建て方を忘れて一から調べ直すのもアホなのでまとめたいと思う。
Linuxをサーバーとして構築するに当たってCLI環境でインストールする。セキュリティ設定は入れないので参考にする方は各々入れるように。1.サーバーをインストール
Ubuntuを使っていく。次のURLへアクセスしISOを落としておく。
https://jp.ubuntu.com/download黒背景の画面
- 言語は「English」を選択
- キーボードレイアウトは「Japanese」を選択
- ネットワークを設定
- 静的の場合は「eth0」→「edit Ipv4」→「manual」を設定
- プロキシは必要ならば設定
- ミラーアドレスはそのまま
- ディスク領域は全体を使用
- 要約はそのままDone
- 確認ダイアログはContinue
- 「ユーザー名」「サーバー名」「パスワード」を設定する
- SSHは入れない(後で入れるけど・・・)
- 機能は追加しない
- インストールが終わったら再起動(インストールメディアは抜いておく)
2.サーバーにログインする
1.10で作成したユーザーでログインし、以下のコードを実行する。
$ export LANG=C $ sudo apt update $ sudo apt install sshSSHを開けたのでリモートPCからログイン。
SSHクライアントはTeraTermを使用。
https://ja.osdn.net/projects/ttssh2/「ホスト名」は1.4で設定したアドレスを入れる。分からなければサーバーで「ip a」を実行する。
「ユーザ名」と「パスフレーズ」は1.10で入れた「ユーザー名」と「パスワード」を入れる。
入れたら「OK」を押す。ログインできたら次のコマンド入れて、日本語化する。
sudoを使うとパスワードを求められるのでログイン時に使ったパスワードを入力。$ sudo apt-get install language-pack-ja-base language-pack-ja $ sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE=ja_JP.UTF-8 $ source /etc/default/locale参考にしたサイト
https://shell-mag.com/portal-linuxserver/
https://symfoware.blog.fc2.com/blog-entry-2447.htmlおしまい
Windows ServerのServer Coreインストールも作ろうかな。
- 投稿日:2020-08-18T08:40:50+09:00
configure で c compiler cannot create executablesとエラーがでて困った時の対処法
はじめに
Ubuntuで
c compiler cannot create executables
というエラーが生じたときの(あくまで私の場合の)原因を書き残しておく
状況
configureする際に、
# ./configure --prefix=/usr/local/openmpi-4.0.4 CC=gcc CFLAGS=-03
としたところ上のようなエラーが生じた。
たいていは、
# apt install build-essential
でgcc(やg++,make)を一括してインストールしてしまえば解決するのだが、私の場合しっかりと最新版になっていた。対処法
./configure --prefix=/usr/local/openmpi-4.0.4 CC=gcc CFLAGS=-03
を
./configure --prefix=/usr/local/openmpi-4.0.4 CC=gcc CFLAGS=-O3
と数字の「0」から大文字のオー「O」へ変更する。
この記事上では違いがはっきりしているが、ubuntuのCUI上では違いが分かりずらかった。
参考にしたページのリンクは下記のURL
- 投稿日:2020-08-18T03:34:50+09:00
docker-composeのenv_fileと.envファイルの違い
docker-compose
において、今まで混同していた
docker-compose.yml
中のenv_file
で読み込むファイル.env
という名前のファイルの違いについて、他の人が同じ過ちをしないように書き留めておきます。
LinuxとWindowsでは環境変数の扱いが微妙に異なるので、Windowsに慣れている人やdocker for windowsを使っている人が引っかかりやすいと思います。
基本的にこの質問と解答と同じ内容ですが、少し情報を足しておきます。
docker-compose cannot understand my env_file | stack overflow
docker-composeと環境変数
公式リファレンス
Dockerドキュメント | compose中の環境変数
に沿って、知識を整理しながら解説します。
docker-compose.yml
中で使うホストの環境変数
docker-compose.yml
中ではホスト側のシェルの環境変数が使えます。例えば、
docker-compose.ymlweb: image: "webapp:${TAG}"と書いておいて、host側で環境変数
TAG
が設定されていればその値が挿入されます。
例えばTAG
にv1.5
という値が設定されていれば、docker-compose build
で作られるimage名はwebapp:v1.5
となります。設定した環境変数にどのような値が挿入されるかは、
docker-compose config
コマンドで確認できます。$ echo $TAG # Windowsの場合は echo %TAG%で確認 v1.5 $ docker-compose config version: '3' services: web: image: 'webapp:v1.5'
.env
ファイルただ、いつもホストに使いたい環境変数が設定されているとは限らないです。
その場合の回避策として、docker-compose.yml
で使う環境変数のデフォルト値を.env
というファイルで設定できます。
例えば.env
ファイルに.envTAG=v1.5
のように設定されていれば、image名は上と同様
webapp:v1.5
となります。
.env
ファイルはdocker-compose
コマンドを実行したときのディレクトリにある必要があります(ワーキングディレクトリ)
他の場所では認識しません。
(Declare default environment variables in file参照)この
.env
ファイルによる設定は、ホストに使いたい環境変数がない場合の回避策なので、
もちろんホストに同名の環境変数が設定されていれば、そちらが優先されます。$ export TAG=v2.0 # Windowsの場合は set TAG=v2.0で環境変数を設定 $ docker-compose config version: '3' services: web: image: 'webapp:v2.0'立ち上げたコンテナ中の環境変数
上の話とは別に
docker-compose.yml
中のenvironment
の項目を使うことで、docker-compose run
やdocker-compose up
で立ち上げたコンテナに環境変数を設定できます。docker-compose.ymlweb: environment: - DEBUG=1とすると、立ち上がったコンテナ中では
$ echo $DEBUG 1と環境変数が設定されています。
docker-compose.yml
中のenv_file
の項目このコンテナ中の環境変数を別ファイルに書いておくこともできます。例えば
web-variables.env
というファイルにweb-variables.envDEBUG=1 FOO=barと書いておき、
web-variables.envweb: env_file: - web-variables.envと、
docker-compose.yml
中のenv_file
の項目で読み込むファイルを指定しておけば、
コンテナ中では$ echo $DEBUG 1 $ echo $FOO barと環境変数が設定されています。
以上から、
env_file
で読み込むファイル- 先程述べた
.env
ファイルは全く働きが別だということがわかると思います。
まとめ
docker-compose.yml
中の$...
は基本的にホストの環境変数であって、お手軽に使える変数ではないenv_file
と.env
ファイルは全く別この問題にはまったきっかけ
最後に、検索することで、できるだけこの問題で引っかかている人が解決できるようにするために、
この問題にはまったきっかけを記しておきます。
docker-compose.yml
中の環境変数を普通の変数のように使おうとしていた
docker-compose.yml
中の$...
に代入する値を場合によって使い分けて、
いろんな場合に対応させようとしたときにこのenv_fileと.envファイルに苦しみました。
本来ならば、-f
オプションを使ったりして、docker-compose.yml
を分割すべきなのかもしれません。docker-composeのプロキシ設定をしたかった
プロキシ下でdocker-composeする場合は
docker-compose
のbuild
中や、
立ち上がったコンテナでHTTP_PROXY
などのプロキシ用の環境変数を設定しなければなりません。これを解決するために
docker-compose
のbuild>args
の項目やenvironment:
の項を設定すればいいのですが、
ここでこのenv_fileと.envファイルに苦しみました。これらを踏まえ、プロキシ下での
docker-compose
するための記事を作りました。docker-composeでのプロキシ設定を一つのファイルにまとめる
VSCodeのRemote Containerで.envファイルを使おうとした
Advanced Container Configuration | VSCode
VSCodeのdockerを使ったリモートデバッグ機能(Remote Container)において、
devcontainer.json
からdockerComposeFile
の項でdocker-compose.yml
を指定し、リモートコンテナを立ち上げようとしました。
その際、プロキシを設定するために.envファイルを使おうとしましたが、
.envファイルをdocker-compose.yml
と同じフォルダにおいてもRemote Containerでは正しく設定できませんでした。原因は上で述べた通り、
.env
ファイルはdocker-compose
コマンドを実行したときのディレクトリにある必要がある
ということでした。Remote Containerではdocker-composeをVSCodeのルートディレクトリで実行しているので、
ルートディレクトリに.env
ファイルはを置いたところ、正常に動作しました。
(Github Microsoft VSCode issue #222参照)