Minecraftサーバー(aws / linux)の不一致Webフックエラー

Minecraftサーバー(aws / linux)の不一致Webフックエラー

Linux(CentOS)を実行しているEC2インスタンス(AWS)でMinecraftサーバーを実行しています。minecraft.serviceシステムプロセスを次のように変更しました。

ExecStart=python3 run_server.py

このPythonスクリプトは、run.jsonサーバーjar名、WebフックURL、役割ID、およびjvmパラメータで埋められたファイルを抽出します。次のようになります。

{
  "server_jar":"server.jar",
  "jvm_args":"-Xms1G -Xmx4G",
  "webhook_url":"your_url_here",
  "role_id":"your_role_here"
}

sudo systemctl start minecraft後で実行すると、sudo systemctl status minecraft次のエラーが発生します。

with Popen(*popenargs, **kwargs) as p:  
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "/usr/local/lib/python3.12/subprocess.py", line 1026, in __init__
 self._execute_child(args, executable, preexec_fn, close_fds,  
File "/usr/local/lib/python3.12/subprocess.py", line 1953, in _execute_child
 raise child_exception_type(errno_num, err_msg, err_filename)  
FileNotFoundError: [Errno 2] No such file or directory: 'java -Xmx3G -Xms3G -jar server.jar nogui'

答え1

より多くのPythonコードを表示するのに役立ちますが、スペースを含む大きな文字列を単一のコマンド名で実行しようとしているため、このエラーが発生しているようです。代わりにリストを渡す必要があります。

間違い:

from subprocess import Popen, PIPE

process = Popen('java -Xmx3G -Xms3G -jar server.jar nogui', stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()

正しい:

from subprocess import Popen, PIPE

process = Popen(
    ['java', '-Xmx3G', '-Xms3G', '-jar', 'server.jar', 'nogui'],
    stdout=PIPE, stderr=PIPE
)
stdout, stderr = process.communicate()

長い文字列を複数のサブ部分に分割し、それらをリストに渡す方法を確認してください。

この回答はさらに役立つかもしれません。https://stackoverflow.com/questions/12605498/how-to-use-subprocess-popen-python

関連情報