'launchd' agent "unloadar" inte vid utloggning

Tråden skapades och har fått 13 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2005-08-05 19:33

Kan någon förklara varför inte en 'launchd' agent (i user domain) inte "unloadar" vid utloggning. Kanske är min plist ofullständig? (Vid omstart fungerar det)

plist:en:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dt...">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.wire.test1</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/admin/launchd_test1.sh</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>
  • Medlem
  • International user
  • 2005-08-05 19:40

Vill någon testa så ser scriptet ut så här:

#!/bin/sh

echo $(date) >> launchd_test1_date.txt
exit 0
Ursprungligen av Wire:

Kan någon förklara varför inte en 'launchd' agent (i user domain) inte "unloadar" vid utloggning. Kanske är min plist ofullständig? (Vid omstart fungerar det)

plist:en:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dt...">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.wire.test1</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/admin/launchd_test1.sh</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

Varför skall den det? "utloggning" är ett Cocoa-koncept. launchd arbetar på Unix-nivå, och där gör man inte skillnad på om en användare är inloggad eller inte.

  • Medlem
  • International user
  • 2005-08-06 11:58

'launchd' skiljer mellan user- och system-domain. En process som startas av loginwindow för en användare som inte är admin, bör rimligen avslutas vid utloggning.

Ursprungligen av Wire:

'launchd' skiljer mellan user- och system-domain. En process som startas av loginwindow för en användare som inte är admin, bör rimligen avslutas vid utloggning.

Den konfiguration du skickat borde ju starta din process direkt när systemet startar, inte när du loggar in.

  • Medlem
  • International user
  • 2005-08-06 13:24
Ursprungligen av lokedhs:

Den konfiguration du skickat borde ju starta din process direkt när systemet startar, inte när du loggar in.

Nej, launchd-agenter i user-domain laddas bara vid inloggning. Testa själv får du se.

Du pratar om /sbin/launchd som körs när du är inloggad? Det är riktigt, den verkar inte avslutas när man loggar ut. Dock så ser jag att även mdimportserver fortfarande körs efter att man loggat ut.

  • Medlem
  • International user
  • 2005-08-06 18:46

'launchd' är alltid igång. Det är ju den som bootar systemet (PID 1 nu mer istället för init). 'launchctl ' däremot borde ju rimligen unloada i user-domain. Sitter och testar hårt mot en Tigerserver nu...

  • Medlem
  • International user
  • 2005-08-06 19:44

Jaha, lösningen för detta var ju enkel för launchd-script (kom på den själv ). Kanske lite "workaround" men fungerar helt OK:

#Lägg till detta i slutet på  scriptet
launchctl unload Library/LaunchAgents/com.wire.test1.plist
Ursprungligen av Wire:

Jaha, lösningen för detta var ju enkel för launchd-script (kom på den själv ). Kanske lite "workaround" men fungerar helt OK:

#Lägg till detta i slutet på  scriptet
launchctl unload Library/LaunchAgents/com.wire.test1.plist

Jag har fortfraande svårt att se vad problemet var från början. Det är ju inte så att en laddad agent drar några resurser. Laddad innebär så vitt jag kan se bara att launchd har information om var den finns och dess konfiguration.

  • Medlem
  • International user
  • 2005-08-08 13:39
Ursprungligen av lokedhs:

Jag har fortfraande svårt att se vad problemet var från början. Det är ju inte så att en laddad agent drar några resurser. Laddad innebär så vitt jag kan se bara att launchd har information om var den finns och dess konfiguration.

Problemet är att agenten bara utförs vid inloggning vid samtidig omstart. Vill man utföra den varje inloggning (utan omstart) fungerar det inte, eftersom den inte - unloadar. Det är mitt problem som jag försöker lösa...

Ursprungligen av Wire:

Problemet är att agenten bara utförs vid inloggning vid samtidig omstart. Vill man utföra den varje inloggning (utan omstart) fungerar det inte, eftersom den inte - unloadar. Det är mitt problem som jag försöker lösa...

Detta verkar ju snarare vara ett fall av att använda fel verktyg. launchd är ju inte till för att lägga upp program som skall köras varje gång du loggar in.

  • Medlem
  • International user
  • 2005-08-09 10:33
Ursprungligen av lokedhs:

Detta verkar ju snarare vara ett fall av att använda fel verktyg. launchd är ju inte till för att lägga upp program som skall köras varje gång du loggar in.

Det är ju precis vad det är. Apple rekommenderar att man lämnar t.ex. login hook och StartupItems till förmån för 'launchd'.

Verkar inte launchd ha en del buggar? Som jag har fattat det så ska plist i LaunchAgents-mappen = in/utloggning styr och plist i LauchDeamons-mappen = systemstart styr.

1
Bevaka tråden