
Ich habe mir jetzt schon eine Weile den Kopf darüber zerbrochen und es ist mir gelungen, mein Problem auf ein Problem einzugrenzen. Ich habe einen Dienst, der ein Shell-Skript ausführen soll, um Daemon-Prozesse zu starten (mit nohup). Diese Prozesse sind Discord-Bots, die mit nodejs und discordjs geschrieben wurden. Derzeit habe ich einen Dienst, der den Test-Discord-Bot startet, wenn ich ihn mit ausführe, sudo systemctl start startdiscordbots
und das funktioniert einwandfrei. Das Problem ist, dass der Dienst beim Neustart des Computers den folgenden Fehler ausgibt:
/daemons/discordbots/discounter/node_modules/discord.js/src/rest/RequestHandler.js:172
Aug 31 13:35:15 ubuntu start.sh[2459]: throw new HTTPError(error.message, error.constructor.name, error.status, request);
Aug 31 13:35:15 ubuntu start.sh[2459]: ^
Aug 31 13:35:15 ubuntu start.sh[2459]: HTTPError [FetchError]: request to https://discord.com/api/v9/gateway/bot failed, reason: getaddrinfo EAI_AGAIN discord.com
Aug 31 13:35:15 ubuntu start.sh[2459]: at RequestHandler.execute (/daemons/discordbots/discounter/node_modules/discord.js/src/rest/RequestHandler.js:172:15)
Aug 31 13:35:15 ubuntu start.sh[2459]: at processTicksAndRejections (node:internal/process/task_queues:96:5)
Aug 31 13:35:15 ubuntu start.sh[2459]: at async RequestHandler.push (/daemons/discordbots/discounter/node_modules/discord.js/src/rest/RequestHandler.js:50:14)
Aug 31 13:35:15 ubuntu start.sh[2459]: at async WebSocketManager.connect (/daemons/discordbots/discounter/node_modules/discord.js/src/client/websocket/WebSocketManager.js:128:9)
Aug 31 13:35:15 ubuntu start.sh[2459]: at async Client.login (/daemons/discordbots/discounter/node_modules/discord.js/src/client/Client.js:245:7) {
Aug 31 13:35:15 ubuntu start.sh[2459]: code: 500,
Aug 31 13:35:15 ubuntu start.sh[2459]: method: 'get',
Aug 31 13:35:15 ubuntu start.sh[2459]: path: '/gateway/bot',
Aug 31 13:35:15 ubuntu start.sh[2459]: requestData: { json: undefined, files: [] }
Aug 31 13:35:15 ubuntu start.sh[2459]: }
Ich weiß also, dass der Dienst einwandfrei startet, sobald alle anderen Dienste korrekt geladen wurden, aber ich vermute, dass es einen Dienst gibt, den ich in den After=
Teil der Datei startdiscordbots.service einfügen muss, den ich übersehen habe. Mein startdiscordbots.service
Code ist unten
[Unit]
Description=Start discord bots as background processes
After=network.target systemd-user-sessions.service
[Service]
Type=simple
ExecStart=/startup/start.sh
Restart=on-failure
RestartSec=5
KillMode=process
User=ubuntu
[Install]
WantedBy=multi-user.target
Weiß jemand, ob es einen Dienst gibt, den ich angeben muss, den After=
ich übersehen habe, oder ist da noch etwas anderes los?
Der Computer, den ich verwende, ist ein RaspberryPi mit installiertem Ubuntu Server. Ich verwende Node v16.8.0 und npm v7.21.0 mit Discordjs v13.1.0. Ich habe nur Zugriff auf das Terminal, also geben Sie mir bitte keine Antworten, in denen Sie mir sagen, ich solle andere Tools verwenden.
Jede Hilfe wäre großartig!
Antwort1
Schreiben Sie eine Funktion, die blockiert, bis das Netzwerk aktiv ist, andere Tests durchführt (gibt es eine default
Route ( man ip ip-route
), können Sie host google.com
( man host
) usw.) und dann Ihre Dienste startet. Ich habe ein Bash-Skript geschrieben, das dabei hilft: https://github.com/waltinator/net-o-matic
Es überwacht die Verbindung und versucht bei einem Verbindungsabbruch auf benutzerdefinierte Weise, die Verbindung wiederherzustellen. Mit ein wenig bash
Wissen können Sie dies ändern. Lesen Sie man bash
.