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이 재부팅될 때마다 실행됩니다!감사해요

관련 정보