
VPS에서 Discord Music Bot을 실행하고 있으며 VPS처럼 봇을 시작하려면 다음과 같은 "bot.service"(/etc/systemd/system에 위치)라는 서비스가 있습니다.
[Unit]
Description=blah blah
[Service]
ExecStart=/usr/bin/java /usr/java/Lavalink.jar #THIS SHOULD START FIRST
ExecStart=/usr/bin/python3 /home/launcher.py #THEN THIS
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
하지만 작동하지 않습니다. 봇은 VPS처럼 시작되지 않습니다. 네, 저는 이 두 가지 명령을 실행했습니다.
sudo systemctl daemon-reload
sudo systemctl enable bot.service
누군가 무슨 일이 일어나고 있는지 알고 있다면 어떤 종류의 도움이라도 정말 감사하겠습니다.
문안 인사.
답변1
ExecStart=
두 명령이 동시에 시작될 것으로 생각됩니다 . 아무것도 없습니다man systemd.service
또는man systemd.exec
다른 하나가 시작되기 전에 하나가 종료될 때까지 기다리거나 다른 하나를 시작하기 전에 하나가 일정한 내부 상태에 있을 때까지 기다릴 것임을 제안합니다.
실제로 및에 man systemd.service
대해 다음과 같이 명시적으로 말합니다 .ExecStartPre=
ExecStartPost=
여러 명령줄이 허용되고 명령이 차례로 실행된다는 점을 제외하면 구문은 ExecStart=와 동일합니다.
ExecStart=
여러 명령이 허용된다고 말하지만 Type=oneshot
하나가 다른 명령 후에 실행된다는 말은 없습니다.
Lavalink.jar
시작하기 전에 종료 하려면 launcher.service
대답은 간단합니다. for ExecStartPre=
대신 사용하십시오 .ExecStart=
Lavalink.jar
그렇지 않고 장기 실행 서비스 launcher.py
에 의존하는 경우 다음과 같이 별도의 서비스로 분할하는 것이 더 나을 수 있습니다.Lavalink.jar
# lavalink.service
[Service]
ExecStart=/usr/bin/java -jar /usr/java/Lavalink.jar
# launcher.service
[Unit]
After=lavalink.service
Requires=lavalink.service
[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/python3 /home/launcher.py
[Install]
WantedBy=multi-user.target
sleep
나는 보통 느린 날에는 두 번째 서비스가 너무 일찍 시작될 수 있고, 빠른 날에는 두 번째 서비스가 가능한 한 빨리 시작되지 않기 때문에 좋아하지 않습니다 .
더 나은 해결책은 Lavalink.jar
감시 장치를 구현하는 것입니다. 그런 다음 Type=watchdog
에서 사용할 수 있습니다 lavalink.service
. 이는 launcher.service
감시자가 에서 하트비트를 수신하기 시작한 후에만 시작 됩니다 lavalink.service
. 이것은 좋은 대체품이 될 것입니다 ExecStartPre=/bin/sleep
.
답변2
Python 스크립트가 시작되지 않는 이유는 모르겠지만 파일을 /usr/bin/java -jar path/to/jar/file
실행하려면 다음 명령을 사용해야 합니다 .jar
.