Мне нужно написать аналог Windows Service под Linux на MonoDevelop, который будет запускаться/завершаться из-под другой программы (как дочерний процесс). Реально ли это сделать на C#?
В документации .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, но статья довольно старая, и сам я такой вариант не пробовал, хватило описанного, так что смотрите сами.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости