He creado el siguiente demonio de lanzamiento para ejecutar un programa nodejs en el inicio ( tiddlywiki en este caso):
<?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>Debug</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/tiddlywiki.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/tiddlywiki.stderr</string>
<key>Label</key>
<string>com.activescott.tiddlywiki</string>
<key>OnDemand</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki</string>
<string>/Volumes/minidata/Dropbox/tiddlywiki/wiki</string>
<string>--listen</string>
<string>credentials=creds.csv</string>
<string>writers=scott</string>
<string>readers=scott</string>
<string>port=443</string>
<string>host=0.0.0.0</string>
<string>tls-key=key.pem</string>
<string>tls-cert=server.crt</string>
</array>
</dict>
</plist>
El archivo se llama com.activescott.tiddlywiki.plist
y está en el /Library/LaunchDaemons/
carpeta.
Si lo cargo con el comando
sudo launchctl load -Fw /Library/LaunchDaemons/com.activescott.tiddlywiki.plist
Lo arranco con el comando de abajo y arranca y funciona bien - sólo que no se reinicia automáticamente cuando el ordenador se reinicia:
sudo launchctl start com.activescott.tiddlywiki
Tenga en cuenta que tarda unos ~20s en arrancar completamente (por ejemplo, responder en un puerto y escribir en stdout).
Estoy en Mac OS X, 10.13.6 con BuildVersion 17G13035
Actualización :
Después de un reinicio me di cuenta de que la salida de sudo launchctl list com.activescott.tiddlywiki
muestra LastExitStatus
como 19968
. Este valor mostrará 0 si lo inicio con launchctl. A continuación se muestra la salida completa:
{
"StandardOutPath" = "/tmp/tiddlywiki.stdout";
"LimitLoadToSessionType" = "System";
"StandardErrorPath" = "/tmp/tiddlywiki.stderr";
"Label" = "com.activescott.tiddlywiki";
"TimeOut" = 30;
"OnDemand" = true;
"LastExitStatus" = 19968;
"Program" = "/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki";
"ProgramArguments" = (
"/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki";
"/Volumes/minidata/Dropbox/tiddlywiki/wiki";
"--listen";
"credentials=creds.csv";
"writers=scott";
"readers=scott";
"port=443";
"host=0.0.0.0";
"tls-key=key.pem";
"tls-cert=server.crt";
);
};