Daemon Launchd

Bassman

Membre vénérable
Club iGen
12 Septembre 2003
17 073
2 420
43
Bonjour za tous.

Voilà, j'ai un petit soucis.
Je suis en train de travailler sur le fait de désactiver l'airport au démarrage des macintosh au taf (sous léopard).

La commande terminal est : networksetup -setairportpower off. Jusque là ok.

J'ai créé ma plist avec lingon (merci SuperMoquette) placée dans /Library/LaunchDaemons/ que voici :

Bloc de code:
<?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>fr.XXX.antiairport</string>
	<key>ProgramArguments</key>
	<array>
		<string>networksetup</string>
		<string>-setairportpower</string>
		<string>off</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

Je met les bons droits sur le fichier (root:wheel propriétaire et 644 comme droits). Je redémarre la machine de test (portable avec l'airport d'actif). Et pouf ! Marche pas :(

Mon premier réflexe est bien entendu de tester la commande dans le terminal, ça marche impeccable.

C'est ou que je merde ?

Edit : Si je mets un <string>sudo</string> en première ligne des ProgramArguments, ça marche... Je devrais pas avoir besoin du sudo... :nailbiting:
 
Ça peut aider. Peut-être le problème est-il dû à l'enchaînement des actions : comme il n'y a pas de dépendance dans launchd, il est difficile de savoir l'ordre de démarrage des services.

Dans les logs, y a-t-il une indication quelconque ?
 
C'est pas un peu con de mettre une instruction terminal connue par osx dans un autre fichier pour l'appeler dans le launchd ? :nailbiting: :casse: :sick:

Bompi : j'ai regardé dans les log, mais n'étant pas très habitué, je n'ai rien trouvé se rapportant a ma commande, je ne sais pas ou chercher en fait.
 
C'est pas un peu con de mettre une instruction terminal connue par osx dans un autre fichier pour l'appeler dans le launchd ? :nailbiting: :casse: :sick:
Ben non, ça a l'avantage de te laisser libre de modifier/enrichir le script sans jamais toucher au job launchd et ça reste lisible "/bin/bash /chemin/vers/vesoul.sh".

Et du coup tu peux mettre plein de chose dedans, comme ds test et des boucles

sinon effectivement testes avec "/usr/sbin/networksetup"
 
Chez moi, je trouve un "networksetup" sous "/System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Support/"...

N'y a-t-il pas un risque de confusion lorsqu'on ne spécifie pas le chemin ?
 
Je ne pense pas qu'il puisse y avoir confusion, dans la mesure où le chemin que tu indiques n'est pas inclus par défaut dans la variable PATH.

Pour revenir sur la remarque du moustachu lausannais, l'avantage du script permet, entre autres, de créer tranquillement des logs lisibles ;) d'autant que les logs de launchd se perdent au milieu du fatras de system.log, donc ce n'est pas commode.

Quant au sudo c'est effectivement mystérieux (je n'avais l'édition du premier post :rateau:) On peut alors supposer que les tâches ne sont pas lancées avec le même uid. Si tu utilises un script, en loggant dans ce dernier la commande id tu pourras voir la différence (s'il y en a une).