Как можно определить источник, вызывающий закрытие приложений .NET на Ubuntu без вашего участия?

Как управлять автономным приложением NET, установленным на сервере Ubuntu, чтобы оно продолжало работать в фоновом режиме после закрытия консоли, и избежать автоматического завершения через некоторое время?
  • 6 марта 2024 г. 10:28
Ответы на вопрос 3
1. Для определения источника, вызывающего закрытие приложений .NET на Ubuntu без вашего участия, можно выполнить следующие действия:
   - Проверить системные журналы на наличие ошибок или уведомлений, связанных с закрытием приложений.
   - Использовать инструменты мониторинга процессов, такие как htop или top, чтобы отследить активность процессов и выявить потенциальные проблемы.
   - Проверить наличие конфликтов с другими приложениями или службами, которые могут вызывать преждевременное закрытие приложения.

2. Для управления автономным приложением .NET на сервере Ubuntu, чтобы оно продолжало работать в фоновом режиме после закрытия консоли, можно использовать утилиту nohup или systemd.

   - Для использования nohup, можно запустить приложение следующим образом:
     ```
     nohup dotnet <путь к исполняемому файлу приложения> &
     ```
     Приложение будет продолжать работать после закрытия консоли.

   - Для использования systemd, можно создать файл конфигурации для запуска приложения как службы. Например, создайте файл myapp.service в директории /etc/systemd/system/ с содержимым:
     ```
     [Unit]
     Description=My .NET application
     
     [Service]
     WorkingDirectory=<рабочая директория приложения>
     ExecStart=/usr/bin/dotnet <путь к исполняемому файлу приложения>
     Restart=always
     
     [Install]
     WantedBy=multi-user.target
     ```
     После создания файла, можно запустить и активировать службу:
     ```
     sudo systemctl start myapp
     sudo systemctl enable myapp
     ```
     Приложение будет автоматически запускаться при загрузке системы и продолжать работу в фоновом режиме.
Автономные приложения под линуксом надо запускать как сервисы через systemd. 
Как это сделать можно почитать тут - https://habr.com/ru/companies/timeweb/articles/759966/

С помощью этого, можно будет выставить политику повторного запуска при остановке, логи можно в syslog сохранять и подобное.
Так как ты запускал это все в фоновом режиме и вышел, то родительским процессом стал init, все логи потерялись. Максимум можно дамп ядра получить, но это еще при выставленных настройках.

Также я не услышал про логи (в каком они виде) - если есть лог файл, то смотри там, иначе ничего сказать не могу.

Могу также порекомандовать запускать это все в докере. Немного замороченно, но та же самая функциональность (логи и рестарт), что и в systemd сервисе.
Никакое это не автономное приложение. Запускайте как systemd-сервис - тогда будет вам и контроль состояния, и логирование, и перезапуск.
Похожие вопросы