system.dカスタムサービスはscript.shを正しく実行しませんが、ユーザーは手動でscript.shを実行できます。

system.dカスタムサービスはscript.shを正しく実行しませんが、ユーザーは手動でscript.shを実行できます。

[解決済み]

私の質問は簡単です。

自動的に起動するmcboot.serviceを作成しました。すべてのMod 8 MCサーバー、sysctlを有効にしてデーモンを再ロードしました。これで問題は、「agent」というユーザーを使用してrun.shを手動で実行できることです。ただし、自動起動時にsysctl状態で次の結果が得られます。

agent@ubntsrv1: /var/ATM8$ systemctl daemon-reload
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon === Authentication is required to reload the systemd state.
Authenticating as: user (agent)
Password:
==== AUTHENTICATION COMPLETE ===
agent@ubntsrv1: /var/ATM8$ systemctl status mcboot.service
mcboot.service Minecraft boot script
Loaded: loaded (/etc/systemd/system/mcboot.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2023-02-02 11:14:20 UTC; 52min ago
Main PID: 718 (code=exited, status=0/SUCCESS)
CPU: 350ms
Feb 02 11:14:18 ubntsrv1 systemd[1]: Started Minecraft boot script.
Feb 02 11:14:18 ubntsrv1 run.sh [718]: /var/ATM8
Feb 02 11:14:19 ubntsrv1 run.sh [723]: Error: Could not find or load main class .var.ATM8.user_jvm_args.txt Feb 02 11:14:19 ubntsrv1 run.sh [723]: Caused by: java.lang.ClassNotFoundException: /var/ATM8/user_jvm_args/txt Feb 02 11:14:20 ubntsrv1 run.sh [718]: /var/ATM8
Feb 02 11:14:20 ubntsrv1 systemd[1]: mcboot.service: Deactivated successfully.
agent@ubntsry1:/var/ATM8$

私のrun.shの内容は次のとおりです。

#!/bin/env sh
# Forge requires a configured set of both JVM and program arguments.
# Add custom JVM arguments to the user_jvm_args.txt
# Add custom program arguments (such as noguil to this file in the next line before the "$@" or
# pass them to this script directly
BASEDIR=$(dirname "$0")
echo "$BASEDIR"
java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.19.2-43.2.3/unix_args.txt BASEDIR=$(dirname "$0")
echo "$BASEDIR"

これは私のmcboot.serviceです。

[Unit]
Description=Minecraft boot script
[Service]
ExecStart=/var/ATM8/run.sh start
[Install]
WantedBy=multi-user.target

私は正しいことをしたいと思い、crontabを使用したくありません。

ありがとう

[修正済み]

別のディレクトリで手動で実行すると、スクリプトは機能します(例:/var/ATM8/run.shの起動)。 (私の考えではありません。)Javaの前にcd "$BASEDIR"を試してみてください...

これは実際に私の問題を解決しました!どこでも手動でスクリプトを実行できますが、実際にはCD $BASEDIRサービスが正常に実行され、R820が再起動されるたびに実行されます。ありがとう

関連情報