前々回のあらすじ
普通に再びシェルスクリプトでまたサーバーの起動スクリプトを書き直そうかと少し考えても居たが、この複雑化を考えると、別言語で書いても望む結果が得られるようなスクリプトが書けるんじゃね?
ということで、最近よく書いていたいつものPython.....
ではなく、突然Rubyに手を出した。
書き方を調べつつ、paizaプログラミングスキルチェックで使ってみたりしてちょっとだけ練習した。
前回のあらすじ
ある程度コードを書いていたが、特にその紹介はせずRubyってPythonと比べてこういう違いがあるんだなってことを書いただけの記事になってしまった。以上。
さらに番外
・・・リンクの、https://nekoyama030330.seesaa.net/article/484981356.html?1640679176 の末尾についてる「?1640679176」って何だろう。消してもちゃんとアクセスできるんだけど、たまについてるんだよねコレ。
脱線したけど、この記事ではcronでプログラムを実行するときに、対話式の仕組みが必要な処理を実行させるとエラー吐くこと、実行パスがcronの場所になってしまうことを確認したので、それを踏まえた上でスクリプトを書いていく。ちなみに、このRubyのスクリプトもcronで定期的に実行するつもりだ。
今回のは起動するだけのスクリプトだけど、停止スクリプトは停止コマンドをscreenの-Xオプションで停止コマンドを送信してバックアップ取るだけだし、cronに乗せるrestart.rbはstop.rbを実行してstart.rbを実行するだけなので、端折る。
stopとrestartはシェルスクリプトで書いてる人がたくさんいるので、そっち参考にしてもらって。なんならstartもファイルの更新確認して起動させてるだけなんだけど。
また、cronについてが少しややこしい。番外編記事の通り、cronは独自パスで通っているのでファイルにアクセスしながらどうこうする、みたいなのは少し工夫が必要らしい。
というか、シェルスクリプトを起動して実行ディレクトリを移動させてからrubyを実行させたらいいんじゃね?
まあとりあえずやってみる。
〇Rubyでの起動スクリプトの記述
サーバーのjarファイルは必ずBuildTools.jarからビルドして入手する必要があるのだが、さっそくビルドしようとしたらopenjdk-17-jdkが必要だとエラーを吐かれてしまった。
という訳で午前三時まで作業していたが、コミット。
遂に完成・・・といいたいが、並列実行スクリプトの管理まではまだ出来ないのでそこは今度実装する。
それぞれ説明するのも相当手間がかかるので、ログを表示。
上のコンソールが起動されたマイクラサーバーのscreen。
プラグインを閲覧しているが、ViaVersion,floodgate,ViaBackwards,Geyser-spigotがちゃんと認識されていることが分かる。これは毎回取得しているので常に最新版となる。
軽く紹介すると、
スクリプト起動
→
config.iniを読み込み、各プラグインのURLを取得
→
サーバーごとのiniのセクションを読み取り、スクリーン名とかjarパスとか取得する
→
フォーマットチェック(軽く)
→
各プラグインをダウンロードしたり解凍したり
→
サーバーセットアップ(buildtool.jarからサーバーのjarをビルドする、これに120秒くらいかかる)
→
プラグインその他をバックアップディレクトリに移動させて、新しいものに置き換える
→
screenを起動する
→
サーバーのログを監視し、正常起動を確認したら起動時間を取得し次セクション実行開始orスクリプトを終了する
異常終了ならsession.lockを削除しリトライし、再失敗したらエラーとして次セクション実行開始orスクリプトを終了する
とまあ、これ複数サーバーの起動にも対応していたりする。
Generalセクションで総合的な設定を記述し、その後のセクションはすべてサーバー別の設定。
これに続けて[TestServer] [SushiServer] ...って続けて書けば、複数サーバーを起動する事が出来るようになっている。
ハズ。
ちなみにGeneralは初期設定でこうなってるので基本触らなくていいんじゃないかな。
という訳で、ほとんど完成に近づいたが、割と記述フォーマット少し間違えたらエラー吐いたりバグったりするだろうってくらいガサツなコードでとりあえず動け程度の継ぎ接ぎで書いた状態なので、安定性の向上や並列実行スクリプト常駐、その他の調整もやって記事にまとめていきたい。
い
じょう
。
(この時点でのスクリプトを実際のサーバーに使う事は非推奨です、)
0
この記事へのコメント