Iniciar o serviço depois que todos os serviços de manipulação de http forem iniciados

Iniciar o serviço depois que todos os serviços de manipulação de http forem iniciados

Estou intrigado com isso há algum tempo e consegui refinar meu problema para um problema. Eu tenho um serviço que deve executar um script de shell para iniciar processos daemon (usando nohup). Esses processos são bots discord escritos usando nodejs e discordjs. Atualmente tenho um serviço que inicia o bot discord de teste quando o executo sudo systemctl start startdiscordbotse funciona bem. O problema é que quando reinicio o computador o serviço gera o erro abaixo:

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

Então, eu sei que o serviço começa bem depois que todos os outros serviços foram carregados corretamente, mas acho que há um serviço que preciso colocar na After=parte do arquivo startdiscordbots.service que perdi, meu startdiscordbots.servicecódigo está abaixo

[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

Alguém sabe se há algum serviço que preciso especificar no After=que perdi ou há algo mais acontecendo?

O computador que estou usando é um RaspberryPi com Ubuntu Server instalado, estou usando node v16.8.0 e npm v7.21.0 com discordjs v13.1.0. Eu só tenho acesso ao terminal, então por favor não responda me dizendo para usar outras ferramentas.

Qualquer ajuda seria incrível!

Responder1

Escreva uma função que bloqueie até que a rede esteja ativa, faça outros testes (existe uma defaultrota ( man ip ip-route), você pode host google.com( man host), etc., e então inicie seus serviços. Eu escrevi um script bash para ajudar com isso: https://github.com/waltinator/net-o-maticEle observa a conexão , e quando a conexão cai, faz algo especificado pelo usuário para tentar reconectar. Um pouco de bashconhecimento permitirá que você modifique isso man bash.

informação relacionada