Toon posts:

launchd werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een prachtige background service die ik graag wil draaien als de user (ik) inlogt, via launchd. Ik heb dus een service geschreven en dat draait verder goed. Nu wil ik die in launchd integreren. Ik heb daarvoor in ~/Library/LaunchAgents/ de volgende .plist geplaatst:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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>com.ronaldbultje.MyService</string>
    <key>Program</key>
    <string>/home/ronaldbultje/Library/Services/MyService</string>
    <key>ProgramArguments</key>
    <array>
        <string>/home/ronaldbultje/Library/Services/MyService</string>
        <string>-launchd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockServiceName</key>
            <string>55209</string>
            <key>SockServiceType</key>
            <string>stream</string>
            <key>SockServiceFamily</key>
            <string>IPv4</string>
            <key>SockPassive</key>
            <true/>
            <key>Bonjour</key>
            <string>my_service</string>
        </dict>
    </dict>
</dict>
</plist>


De -launchd argument heeft als functie om ervoor te zorgen dat mijn applicatie vanuit launchd een bonjour-serice start en dat 'ie dus niet hoeft te draaien als 'ie niet actief is. Zonder dat maakt 'ie zelf die service aan (voor debugging). De rest lijkt mij duidelijk. Als ik deze start via launchctl load dan kan ik inderdaad op andere computers de service zien, en launchctl list laat zien dat de bonjour-service geregistreerd is (maar het proces zelf draait niet, vanwege de "RunAtLoad"). So far so good.

Normaal kan ik connecten als mijn service via de commandline wordt gestart (zonder launchd), maar nu niet, ik krijg een connection timeout op de andere client. Mijn launchctl list laat dit zien:

code:
1
2
3
4
5
6
7
8
9
10
[..]
24  -   0x102ff0.loginwindow
20  -   0x102cc0.securityd
-   0   com.apple.launchctl.Aqua
-   1   com.ronaldbultje.MyService
47740   -   0x10f020.FNPLicensingServ
47738   -   0x10c0b0.Adobe Photoshop 
33  -   0x111ce0.diskarbitrationd
120 -   0x10c410.launchd
[..]


Note de "1" als status - dat is een "0" totdat ik voor het eerst aan de service probeer te connecten, dan wordt 't een 1. Als ik handmatig (na de load) een launchctl start MyService doe, dan krijg ik ook direct een status 1. Het lijkt dus alsof mijn service niet kan starten (ps xa geeft aan dat ie niet draait). Om dit te proberen te debuggen heb ik een logfile-functie geschreven met fflush() na elke fprintf(), en als eerste regel in MyService een fprintf() met slechts de programma-argumenten, om te checken of 'ie wel gestart wordt. Als ik de service draai vanuit de console, wordt de logfile idd geschreven. Echter, vanuit launchd: helemaal niks. Mijn service wil niet vanuit launchd draaien, of in andere woorden: launchd doet het niet.

Mijn vraag: waarom niet? Google helpt me niet echt, ik heb 1 iemand gevonden met hetzelfde probleem, maar geen oplossing...

edit:

Hier de syslog output (kwam ik net achter):

code:
1
2
3
Mon Apr 27 14:00:19 mac121641 com.apple.launchd[120] (com.ronaldbultje.myService[97069]) <Error>: posix_spawn("/home/ronaldbultje/Library/Services/myService", ...): Input/output error
Mon Apr 27 14:00:19 mac121641 com.apple.launchd[120] (com.ronaldbultje.myService[97069]) <Warning>: Exited with exit code: 1
Mon Apr 27 14:00:22 mac121641 com.apple.launchd[120] (com.ronaldbultje.myService) <Warning>: Throttling respawn: Will start in 7 seconds

[ Voor 8% gewijzigd door Verwijderd op 27-04-2009 23:59 . Reden: meer info ]


Verwijderd

Topicstarter
Aaaaaah
Verwijderd schreef op maandag 27 april 2009 @ 20:24:
code:
1
    <string>/home/ronaldbultje/Library/Services/MyService</string>
/me * dat moest dus /Users/ zijn. |:(. Sorry voor de spam.