最近、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