Dienst starten, nachdem alle HTTP-Verarbeitungsdienste gestartet wurden

Dienst starten, nachdem alle HTTP-Verarbeitungsdienste gestartet wurden

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 startdiscordbotsund 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.serviceCode 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 defaultRoute ( 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-maticEs überwacht die Verbindung und versucht bei einem Verbindungsabbruch auf benutzerdefinierte Weise, die Verbindung wiederherzustellen. Mit ein wenig bashWissen können Sie dies ändern. Lesen Sie man bash.

verwandte Informationen