所有 http 处理服务启动后再启动服务

所有 http 处理服务启动后再启动服务

我已经对这个问题困惑了一段时间,现在我设法将问题细化为一个问题。我有一个服务,它应该运行一个 shell 脚本来启动守护进程(使用 nohup),这些进程是使用 nodejs 和 discordjs 编写的 discord 机器人。目前,我有一个服务,当我使用它运行时,它会启动测试 discord 机器人,sudo systemctl start startdiscordbots并且运行良好。问题是当我重新启动计算机时,服务会抛出以下错误:

/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]: }

因此,我知道一旦所有其他服务都正确加载,该服务就可以正常启动,但我猜测我需要将一项服务放入我After=遗漏的 startdiscordbots.service 文件中的部分,我的startdiscordbots.service代码如下

[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

是否有人知道我是否需要在其中指定After=我错过的服务,或者是否还有其他事情发生?

我使用的计算机是安装了 Ubuntu Server 的 RaspberryPi,我使用的是 node v16.8.0 和 npm v7.21.0 以及 discordjs v13.1.0。我只能访问终端,所以请不要告诉我使用其他工具。

任何帮助都将非常有帮助!

答案1

编写一个函数,该函数阻塞直到网络启动,进行其他测试(是否有路由defaultman ip ip-route),您可以host google.comman host)等,然后启动您的服务。我编写了一个 bash 脚本来帮助完成此操作:https://github.com/waltinator/net-o-matic它监视连接,当连接断开时,执行用户指定的事情以尝试重新连接。一点bash知识就可以让您修改它。阅读man bash

相关内容