MineOSで自動保存機能が働かない

最近、MineOSでスケジュールで、自動的にアーカイブを生成する時の処理に問題があることを発見しました。

スケジュールのアクションの内「アーカイブ作成時に’save-all’する」を使用していると、自動保存がいつの間にかOFF(save-off)になり、サーバが異常終了すると、それまでの変更が失われる可能性があります。

※通常終了した場合は、ちゃんと保存されるようです。

原因を調べていたところ、Mineceraftのバージョンアップに伴い、Minecraftサーバが、セーブ完了時や自動セーブ再開時に出力する文字が変更となったため、MineOSが現在のワールドのセーブ状態を正しく把握できず、アーカイブ生成後の後処理で自動保存をONにできない事象のようです。

一応、修正のパッチを置いておきます、当方の環境では特に問題は出ていませんが、適用前には、バックアップを行い、使用は自己責任でお願いします。なお、適用後はMineOSのリスタートが必要となります。

※ついでに、アーカイブ生成時にエラーが発生する件も修正してあります。

・対象のファイル: mineos.js
通常は「/usr/games/minecraft/mineos.js」に保存されているはずです。

--- mineos.js	2021-06-29 01:31:00.000000000 +0900
+++ mineos_new.js	2021-11-03 17:25:33.000000000 +0900
@@ -448,7 +448,8 @@
       case 'tgz':
       case 'tar':
         var binary = which.sync('tar');
-        var args = ['-xf', dest_filepath];
+        var args = ['--force-local',
+                    '-xf', dest_filepath];
         var params = { cwd: self.env.cwd,
                        uid: owner.uid,
                        gid: owner.gid };
@@ -979,7 +980,7 @@
     }, TIMEOUT_LENGTH);
 
     new_tail.on('line', function(data) {
-      var match = data.match(/INFO]: Saved the world/);
+      var match = data.match(/INFO]: Saved the game/);
       if (match) { //previously on, return true
         clearTimeout(timeout);
         new_tail.unwatch();
@@ -1505,7 +1506,7 @@
             new_tail.unwatch();
             return callback(null, true);
           }
-          var match = data.match(/INFO]: Turned on world auto-saving/);
+          var match = data.match(/INFO]: Automatic saving is now enabled/);
           if (match) { //previously off, return false
             clearTimeout(timeout);
             new_tail.unwatch();
  • パッチ実行例
# patch -u < mineos.js.diff

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です