すべてのhttp処理サービスが開始された後にサービスを開始します

すべてのhttp処理サービスが開始された後にサービスを開始します

私はしばらくこの問題に悩まされてきましたが、問題を 1 つに絞り込むことができました。デーモン プロセス (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

ネットワークが起動するまでブロックし、他のテスト (defaultルートがあるか ( man ip ip-route)、できるかhost google.com( man host) など) を実行してからサービスを開始する関数を記述します。これを支援する bash スクリプトを作成しました。このスクリプトhttps://github.com/waltinator/net-o-maticは接続を監視し、接続が切断されると、ユーザーが指定した操作を行って再接続を試みます。少しのbash知識があれば、これを変更できるようになります。をお読みくださいman bash

関連情報