Daemon на MonoDevelop (C#)

94
10 октября 2021, 23:00

Мне нужно написать аналог Windows Service под Linux на MonoDevelop, который будет запускаться/завершаться из-под другой программы (как дочерний процесс). Реально ли это сделать на C#?

Answer 1

В документации .net core есть пример. Официально, пример для Ubuntu 16.04, я использовал на Centos 7. Вероятно, будет работать на большинстве популярных дистрибутивов linux, но это я не проверял, стараюсь избегать зоопарка. В целом, такой подход позволяет "демонизировать" любое консольное приложение, главное чтобы оно работало с стандартным потоком вывода.

Тут приведу только необходимый минимум, подробности в документации по ссылке и документации вашего конкретного дистрибутива линукс (могут быть отличия, иногда существенные, ибо зоопарк)

Создайте файл определения службы.

sudo nano /etc/systemd/system/kestrel-helloapp.service

Пример файла службы для нашего приложения.

[Unit]
Description=Example .NET Web API App running on Ubuntu
[Service]
WorkingDirectory=/var/www/helloapp
#команда для запуска вашего приложения такая же, как при обычном запуске в консоли
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
#не забываем предварительно создать пользователя и выдать ему необходимые права
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target

Сохраните файл и включите службу.

sudo systemctl enable kestrel-helloapp.service

Запустите службу и убедитесь, что она работает.

sudo systemctl start kestrel-helloapp.service

sudo systemctl status kestrel-helloapp.service

Тут есть вариант с использованием supervisor, но статья довольно старая, и сам я такой вариант не пробовал, хватило описанного, так что смотрите сами.

READ ALSO
Как поставить иконку в MenuItem C#?

Как поставить иконку в MenuItem C#?

Вроде бы простой вопрос, только я не нашел соответствующего свойства в спискеВозможно ли это вообще? Прошу не предлагать ToolStripMenuItem

125
Списки в c# и как их читать?

Списки в c# и как их читать?

у меня достаточно лёгий вопрос (наверное), как считать значения с списка при заданном значении? Например у меня есть список, очень большой...

165
Ошибка при неявном преобразовании [дубликат]

Ошибка при неявном преобразовании [дубликат]

Пишу класс рациональных чиселПри неявном преобразовании возникает ошибка (StackOverflowException), причину которой понять не получается

131