LauchDaemons, launchd och launchctl

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Apple har infört launchd som ersättning för inetd etc. Detta ersätter också cron jobben för t.ex. periodic [daily, weekly, monthly}

Jag försöker nu att skapa ett jobb som körs varje vecka. Jobbet består av att köra ett script rundiskutil som består av

#! /bin/sh
date >>  /var/log/RunDiskUtil.log
diskutil repairPermissions / 2>&1 >> /var/log/RunDiskUtil.log
echo ""  >>  /var/log/RunDiskUtil.log

alltså att reparera filrättigheterna på root partitionen och skriva ti en log fil.

Scriptet fungerar aldeles utmärkt och det är inga konstigheter. Problemet uppkommer vid använding av launcctl. Min plist fil laddas ok med

$ launchctl load -w /Library/LaunchDaemons/com.gnumac.rundiskutil.plist

och ser ut som följande

<?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.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.gnumac.rundiskutil</string>
        <key>LowPriorityIO</key>
        <true/>
        <key>Nice</key>
        <integer>1</integer>
        <key>On Demand</key>
        <true/>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/rundiskutil</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>10</integer>
                <key>Minute</key>
                <integer>25</integer>
                <key>Weekday</key>
                <integer>5</integer>
        </dict>
</dict>
</plist>

Denna verifieras av Xcode som en riktig XML-fil ändå körs inte scriptet av launchd. Är det någon som vet var felet kan bestå?

  • Medlem
  • Lund
  • 2005-08-12 11:41
Ursprungligen av speedhead:

<key>On Demand</key>

Ska det verkligen vara ett space där?

Och om du kör

launchctl list

syns ditt jobb då?

Testat att köra

launchctl start om.gnumac.rundiskutil

Varför använder du "-w" flaggan?

  • Medlem
  • Kiruna
  • 2005-08-12 12:41

Som zap redan påpekat ska det inte vara ett mellanslag i OnDemand. Sen har jag inte hunnit kika jättemycket på launchd ännu, men eftersom plist:en ligger i LaunchDaemons och inte Agents skulle jag tippa på att du behöver skicka in jobbet med launchctl som root:

sudo launchctl load ...

Ang. Ondemand. Korrekt kod sksa vara

<key>OnDemand</key>

Tack för det men det gör ingen skillnad. Skriptet körs ändå inte. En fråga som kan vara relevant är om det behövs överhuvudtaget. Se /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist som saknar OnDemand.

launchctl list 

visar att skriptet är laddat

launchctl start com.gnumac.rundiskutil 

fungerar. DiskUtility körs och korreckt log skrivs.

Alla kommandon til launchctl är körda som root (sudo -s)

Förklaring till -w flaggan: " Remove the disabled key and write the configuration
files back out to disk." Se man launchctl. Den behövdes för att launchctl överhuvdtaget ska ladda min .plist fil .

Tack för alla tips men inget har hjälpt. Några fler förslag. Jag blir galen på det här. Alternativet är att köra det som ett cron-jobb men det bryter en del mot Apple standard så det skulle vara roligt att få det fungera.

Ursprungligen av speedhead:

Förklaring till -w flaggan: " Remove the disabled key and write the configuration
files back out to disk." Se man launchctl. Den behövdes för att launchctl överhuvdtaget ska ladda min .plist fil .

Jo, men om din plist inte redan har någon "disabled key" att ta bort så lägger väl -w till den?

  • Medlem
  • International user
  • 2005-08-12 14:02

Ligger ditt script verkligen i "/usr/sbin" ? Är namnet på scriptet korrekt? Scriptet bör sluta med '.sh'. Scriptfilen och namnet i din '.plist'.

Jepp, det ligger i /usr/sbin och namnet i .plist filen stämmer. Annars skulle inte launchctl start com.gnumac.rundiskutil fungera vilket den gör och jag har dubbelkollat filnamnen. Något fel med att den ligger i /usr/sbin?

Inte vid launchctl load -w . Det gör den vi launchctl unload -w

Nu är problemet löst. Det verkar som att Apple har en bug i launchd som gör att om en .plist fil skapas för att köra vid vissa tidsintervall och intervallet ligger för nära i tiden från det att filen laddas med launchctl så skjuts det upp till ett senare tillfälle. Det rör sig om ca 1 timme. Det finns mer att läsa om detta på http://discussions.info.apple.com/webx?13@629.c3hpaHrD49d.1@.68b4a015/2

1
Bevaka tråden