ターゲット:
Fedoraでsystemdを使用して、コンピュータの起動時にMinecraftサーバーを実行しようとしています。サーバーを適切に管理するために満たす必要があるいくつかの独自の基準があります。
minecraft
私のホームディレクトリを使用して作成したシステムユーザーとして実行する必要があります/opt/minecraft
。私はadduser
ingを渡してから行を追加しようとしましたUser=minecraft
。WorkingDirectory=/opt/minecraft/
- スケーラブルで、すべての数のサーバーで動作する必要があります。テンプレートサービスを使用して、ディレクトリを渡すように行を
WorkingDirectory
変更しました。WorkingDirectory=/opt/minecraft/%i
- 何らかの方法でコマンドを渡すことができるはずです。それが私が擁護することです。ソケットデバイスを試してから接続してみましたが、
/run/minecraft%I
正しく動作しません。 Minecraftサーバーを初めて使用する場合は、コマンドを渡すことができるインタラクティブコンソールがあります。以前はセッションtmux send
で駆動されるサーバーを使ってみましたが、tmux
問題は自動的に起動せず、豪華な感じもしないという点です。
試すことができる解決策:
/usr/local/lib/systemd/system/[email protected]
:
[Unit]
Description=Minecraft server: %i
# only run after networking is ready
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# restart if the server crashes
Restart=on-failure
RestartSec=5s
# set the input and outputs to a socket unit and the journal resp.
Sockets=minecraft@%i.socket
StandardInput=socket
StandardOutput=journal
StandardError=journal
# set the user and directory to the correct values
User=minecraft
WorkingDirectory=/opt/minecraft/%i/
# run the start script for the specified server
ExecStart=/bin/bash /opt/minecraft/%i/start.sh
[Install]
WantedBy=default.target
/usr/local/lib/systemd/system/[email protected]
:
[Unit]
Description=Socket for Minecraft server: %i
[Socket]
# listen to a pipe for input
ListenFIFO=%t/minecraft%I.stdin
Service=minecraft@%i.service
質問:
サーバーを起動しようとするとsudo systemctl start minecraft@1_17_1.service
(サーバーがインストールされている場合/opt/minecraft/1_17_1/
)、失敗します。
Job for minecraft@1_17_1.service failed because of unavailable resources or another system error.
See "systemctl status minecraft@1_17_1.service" and "journalctl -xeu minecraft@1_17_1.service" for details.
これにより、以下を実行するように求められますsystemctl status minecraft@1_17_1.service
。
● minecraft@1_17_1.service - Minecraft server: 1_17_1
Loaded: loaded (/usr/local/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: resources) since Thu 2021-11-04 14:37:27 EDT; 163ms ago
TriggeredBy: × minecraft@1_17_1.socket
CPU: 0
そしてjournalctl -xeu minecraft@1_17_1.service
Nov 04 14:51:01 riley-fedora systemd[1]: minecraft@1_17_1.service: Got no socket.
Nov 04 14:51:01 riley-fedora systemd[1]: minecraft@1_17_1.service: Failed to run 'start' task: Invalid argument
Nov 04 14:51:01 riley-fedora systemd[1]: minecraft@1_17_1.service: Failed with result 'resources'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ The unit minecraft@1_17_1.service has entered the 'failed' state with result 'resources'.
Nov 04 14:51:01 riley-fedora systemd[1]: Failed to start Minecraft server: 1_17_1.
░░ Subject: A start job for unit minecraft@1_17_1.service has failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit minecraft@1_17_1.service has finished with a failure.
░░
░░ The job identifier is 55890 and the job result is failed.
私のファイルに怒っているようで、[email protected]
次のことを実行しましたsystemctl status minecraft@1_17_1.socket
。
× minecraft@1_17_1.socket - Socket for Minecraft server: 1_17_1
Loaded: loaded (/usr/local/lib/systemd/system/[email protected]; static)
Active: failed (Result: resources)
Triggers: ● minecraft@1_17_1.service
Listen: /run/minecraft1_17_1.stdin (FIFO)
Nov 04 14:52:35 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed with result 'resources'.
Nov 04 14:52:35 riley-fedora systemd[1]: Failed to listen on Socket for Minecraft server: 1_17_1.
Nov 04 14:52:41 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to open FIFO /run/minecraft1_17_1.stdin: Permission denied
Nov 04 14:52:41 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to listen on sockets: Permission denied
Nov 04 14:52:41 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed with result 'resources'.
Nov 04 14:52:41 riley-fedora systemd[1]: Failed to listen on Socket for Minecraft server: 1_17_1.
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to open FIFO /run/minecraft1_17_1.stdin: Permission denied
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to listen on sockets: Permission denied
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed with result 'resources'.
Nov 04 14:52:46 riley-fedora systemd[1]: Failed to listen on Socket for Minecraft server: 1_17_1.
だから問題は私が使用しているパイプの権限に関連しているようです。
良い測定のために走ったjournalctl -xeu minecraft@1_17_1.socket
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to open FIFO /run/minecraft1_17_1.stdin: Permission denied
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed to listen on sockets: Permission denied
Nov 04 14:52:46 riley-fedora systemd[1]: minecraft@1_17_1.socket: Failed with result 'resources'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ The unit minecraft@1_17_1.socket has entered the 'failed' state with result 'resources'.
Nov 04 14:52:46 riley-fedora systemd[1]: Failed to listen on Socket for Minecraft server: 1_17_1.
░░ Subject: A start job for unit minecraft@1_17_1.socket has failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit minecraft@1_17_1.socket has finished with a failure.
░░
░░ The job identifier is 58598 and the job result is failed.
質問:
私は何が間違っていましたか? 4時間かかりました。パンツGoogleの2番目、3番目、4番目のページにも解決策はありません。私はここで迷っているので、すべての助けに感謝します。
ベストアンサー1
問題を再現できないため、完全な回答はできません。しかし、検証可能な最小限の例を構築しようとし、いくつかのトラブルシューティングのアイデアを考えました。
# /etc/systemd/system/[email protected]
[Service]
ExecStart=cat -
User=stew
Sockets=sockinst@%i.socket
StandardInput=socket
StandardOutput=journal
StandardError=journal
# /etc/systemd/system/[email protected]
[Socket]
ListenFIFO=%t/sockinst%I.stdin
Service=sockinst@%i.service
その後、実行すると動作します。
stew /etc/systemd/system $ systemctl start sockinst@1_1.service
stew /etc/systemd/system $ echo "Hello" > /run/sockinst1_1.stdin
stew /etc/systemd/system $ systemctl status sockinst@1_1.{service,socket}
● sockinst@1_1.service - Testing instanced sockets 1_1
Loaded: loaded (/etc/systemd/system/[email protected]; static)
Active: active (running) since Fri 2021-11-05 10:35:41 CET; 37s ago
TriggeredBy: ● sockinst@1_1.socket
systemd[1]: Started Testing instanced sockets 1_1.
cat[11623]: Hello
● sockinst@1_1.socket - Socket for instance 1_1
Loaded: loaded (/etc/systemd/system/[email protected]; static)
Active: active (running) since Fri 2021-11-05 10:35:41 CET; 37s ago
Triggers: ● sockinst@1_1.service
Listen: /run/sockinst1_1.stdin (FIFO)
systemd[1]: Listening on Socket for instance 1_1.
ここで触れることができるいくつかのヒントは次のとおりです。
これにより、
systemctl stop minecraft@1_17_1.service
パラレルソケットは停止しません。これは/run/minecraft1_17_1.stdin
継続的に実行されることを意味します。実際、これはecho "hello" > /run/minecraft1_17_1.stdin
サービスを開始します。サービスの問題を解決する場合、古いソケットがテストに影響を与える可能性があると思います。次の2つのオプションのいずれかを選択することをお勧めします。- それを利用
systemctl stop minecrat@1_17_1.{service,socket}
して防ぎ、 - ソケットセクション
PartOf=minecraft@%i.service
に追加されました。[Unit]
これによりサービスが停止すると自動的に停止します。
- それを利用
あなたはを使用しています
Restart=on-failure
。これは最終結果には適していますが、初期失敗を隠すことができます。問題の解決中に一時的に削除してみてください。その後、失敗すると、失敗の元の理由を確認できます。私はサーバーの起動に正当な問題があるようですが、ソケットは最初のインスタンスにバインドされています。その後、再起動するたびにExecStart =を試す前に以前のソケットにバインドできないため、最初から失敗した理由はわかりません。サービスとソケットを必ず停止してから起動し、すぐに出力を確認してください。エラーメッセージが違っても驚かないでしょう。Minecraftサーバーにグラフィカルユーザーインターフェースがあると説明しました。これはオプションであり、突然あなた
DISPLAY
とXAUTHORITY
あなたが設定した内容によって異なります。これは壊れる可能性がある多くのものを引き起こします。サービス担当者に連絡して、初期障害の原因を取り除くようにnogui
選択してください。本当にそのGUIが必要な場合は、start.sh
スクリプトで環境変数DISPLAY
を設定する必要がありますXAUTHORITY
(ただし、これが必ずしも最も簡単なことではありません)。サービスを実行できることを確認するには、少なくともGUIなしで試してみることをお勧めします。sudo systemctl daemon-reload
ファイルの編集中に実行するのを忘れることもあります。注 systemd が各デバイスの最新バージョンを読み取れるように、このコマンドを実行する必要があります。