Sí, a través de launchd
-- tendrá que utilizar launchctl
para configurar las aplicaciones en su mac para que se ejecuten a través de launchd
(similar a Linux systemd
o el SCM de Windows).
De otro post, "No hay ningún requisito de que uses ninguna API Cocoa/Mac para implementar un agente/demonio, podrías ejecutar cualquier aplicación de consola bajo launchd y lo anterior seguiría siendo cierto." ~ SO#40952619
Sólo necesitas un plist y un script.
El script
Mi consejo es que coloques tu script en /usr/local/bin/
o similar, chown
a Root:wheel, y chmod
a 755 haciéndolo un ejecutable. Su script debe contener la ruta completa a dotnet
y cd
a la carpeta de trabajo de su servicio antes de iniciar la ejecución. Esto es sólo un ejemplo:
#!/bin/sh
cd /path/to/your/service/
/usr/local/share/dotnet/dotnet MyService.dll
Por el bien de este post, vamos a suponer que has guardado esto como /usr/local/bin/launch-my-service.sh
:
sudo chown root:wheel /usr/local/bin/launch-my-service.sh
sudo chmod 755 /usr/local/bin/launch-my-service.sh
Si ejecuta este script manualmente debería lanzar con éxito su servicio. Una vez confirmado, mata el proceso y crea el PLIST.
La lista de precios
Para launchd
quiere un plist, toma esto como ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>localhost.my-service</string>
<key>Program</key>
<string>/usr/local/bin/launch-my-service.sh</string>
<key>RunAtLoad</key>
</dict>
</plist>
Guarda esto en tu carpeta de inicio, launchctl hará una copia de él de todos modos. Por el bien de este post, vamos a suponer que guardaste esto como localhost.my-service.plist
para que coincida con la "Etiqueta" configurada dentro del plist (que es lo que launchctl
se mostrará).
Configurar launchd
Ahora añadimos el "servicio" a launchd
y arrancarlo:
launchctl load localhost.my-service.plist # here we specify the plist file
launchctl list | grep localhost
launchctl start localhost.my-service # here we specify the "Label" configured in the plist file
Está más allá del alcance de este Q&A, pero, esto crea un "Agente" (en lugar de un Daemon), que es un concepto específico de MacOS/launchd. Un "Agente" es una aplicación que se ejecuta en segundo plano cada vez que un usuario se conecta al escritorio de MacOS. El Agente se ejecuta con la identidad del usuario conectado. El estado de ejecución de un Agente puede cambiar en función del estado de inicio de sesión del usuario (puede detenerse, tombstone, etc.) También es posible instalarlo como un "Daemon" que se ejecutaría en el contexto del sistema (en lugar del usuario que ha iniciado la sesión), y que puede configurarse para que se ejecute tanto si el usuario inicia la sesión como si no. Un ejemplo de plist para configurar un "demonio compatible con inetd" se puede encontrar en developer.apple.com "Crear launchd
Trabajos"
HTH alguien más por ahí. Totalmente irrelevante si usted está usando dotnet
, java
, lua
o python
A MacOS no le importa.