J'ai créé le démon de lancement ci-dessous pour exécuter un programme nodejs au démarrage (tiddlywiki dans ce cas) :
Debug
StandardOutPath
/tmp/tiddlywiki.stdout
StandardErrorPath
/tmp/tiddlywiki.stderr
Label
com.activescott.tiddlywiki
OnDemand
RunAtLoad
KeepAlive
inetdCompatibility
Wait
EnvironmentVariables
PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:
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
Le fichier est nommé com.activescott.tiddlywiki.plist
et il se trouve dans le dossier /Library/LaunchDaemons/
.
Si je le charge avec la commande :
sudo launchctl load -Fw /Library/LaunchDaemons/com.activescott.tiddlywiki.plist
Je le lance avec la commande ci-dessous et il démarrera et fonctionnera correctement - il ne redémarrera simplement pas automatiquement lorsque l'ordinateur redémarre :
sudo launchctl start com.activescott.tiddlywiki
Remarque, cela prend environ ~20s pour démarrer complètement (par exemple répondre sur un port et écrire sur stdout).
Je suis sur Mac OS X, 10.13.6 avec BuildVersion 17G13035
Mise à jour :
Après un redémarrage, j'ai remarqué que la sortie de sudo launchctl list com.activescott.tiddlywiki
montre LastExitStatus
comme 19968
. Cette valeur affichera 0 si je le démarre avec launchctl. Voici la sortie complète :
{
"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";
);
};
0 votes
Où spécifiez-vous la clé
Program
? c'est-à-dire, quel est le programme que vous exécutez et où se trouve-t-il?1 votes
Avez-vous également essayé d'exécuter cela avec un script plutôt que d'avoir plusieurs arguments de programme. Il y a aussi un paramètre de montage, assurez-vous de vérifier si le chemin du volume existe. Essayez également avec le paramètre de maintien suivant :
KeepAlive SuccessfulExit
Ce modèle semble fonctionner, essayez également avec ceci : gist.github.com/lordlycastle/0efb8a10d2ccb7a90e4e5b1c9749ccf21 votes
Veuillez poster la sortie de
grep -F com.activescott.tiddlywiki /var/log/system.log
après avoir redémarré. (Les dernières lignes de la sortie devraient suffire.)1 votes
Essayez de supprimer complètement les clés
OnDemand
etRunAtLoad
. La page de manuel pour launchd.plist déconseille les deux.KeepAlive
défini sur true devrait suffire pour démarrer le démon. Au fait, je remarque que vous chargez le travail avec les options -Fw. L'option -F peut amener launchctl à ignorer l'option -w (je ne suis pas sûr de cela, mais cela vaut la peine d'être étudié), et si vous déchargez avec l'option -w, vous désactivez automatiquement le travail. Je n'utiliserais pas ces options du tout à moins d'avoir une raison de le faire.0 votes
@user14492 Selon ce que je comprends, vous pouvez utiliser
Program
ouProgramArguments
. Les exemples récents d'Apple n'utilisent queProgramArguments
et semblent fonctionner lorsque je les lance avec launchctl load ...0 votes
@user14492 maintenez la connexion active avec un succès à la sortie comme vous l'avez fait n'a pas fonctionné. :(
0 votes
@Synoli
28 juin 23:28:59 minicomp-ethernet com.apple.xpc.launchd[1] (com.activescott.tiddlywiki): La clé de débogage n'est plus respectée. Veuillez la supprimer. 28 juin 23:28:59 minicomp-ethernet com.apple.xpc.launchd[1] (com.activescott.tiddlywiki[541]): Service compatible avec inetd sans sockets.
0 votes
@TedWrigley Supprimer complètement les clés
OnDemand
etRunAtLoad
n'a pas fonctionné.0 votes
Vous pourriez également essayer la version d'essai de Lingon qui est conçue pour créer des démons. (Je ne suis pas le développeur, j'utilise simplement l'application pour ces cas). Et voir ce qui diffère de celui que vous avez créé. Je n'ai pas besoin d'utiliser le terminal après avoir activé/créé un démon.