所有 http 處理服務啟動後啟動服務

所有 http 處理服務啟動後啟動服務

我對這個問題已經困惑了一段時間,並且我已經設法將我的問題細化為一個問題。我有一個服務應該運行 shell 腳本來啟動守護程序(使用 nohup),這些程序是使用 nodejs 和 Discordjs 編寫的不和諧機器人。目前,我有一項服務,當我使用它運行時啟動測試不和諧機器人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

相關內容