
Я ломал голову над этим уже некоторое время, и мне удалось свести свою проблему к одной проблеме. У меня есть служба, которая должна запускать скрипт оболочки для запуска демон-процессов (используя nohup), эти процессы — боты Discord, написанные с использованием nodejs и discordjs. В настоящее время у меня есть служба, которая запускает тестового бота 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=
я ее пропустил, или происходит что-то еще?
Компьютер, который я использую, это RaspberryPi с установленным Ubuntu Server, я использую 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
.