Scripts beim Hochfahren automatisch ausführen

mayuka

mayuka

Aktives Mitglied
Thread Starter
Dabei seit
28.10.2007
Beiträge
380
Reaktionspunkte
13
Hallo.

Ich möchte ein shell-script jedesmal wenn mein Mac mini startet, automatisch ausführen lassen. Wie kann ich das erreichen? Wo muss ich mein shell-script platzieren, damit es bei jedem Systemstart ausgeführt wird?

Vielen Dank!
 
stichwort launchd...
mach dir halt eine plist für LaunchDaemons mit lingon o.ä. utility...
 
ja und?
das existierende lingon macht dir immer noch eine funktionierende plist für launchd...

oder du machst die halt selbst, ist schliesslich nur XML...
 
Hm.... Also es funktioniert natürlich nicht. :(:(:(:confused::confused::confused:

Wenn ich das Script /Library/LaunchAgents oder /System/Library/LaunchAgents packe spielt dabei keine Rolle. Es kommt immer folgende Fehlermeldung:

Aug 17 13:19:40 mayuka net.mayuka.firewall[102]: ipfw: socket: Operation not permitted

Wahrscheinlich muss ich das Script irgendwie mit root-Rechten starten (ipfw starte ich sonst mit sudo). Wie kann ich denn das machen? Hat jemand eine Idee?
 
LaunchAgents werden erst beim einloggen eines benutzers geladen...
nimm LaunchDaemons, dort wird es dann auch als root ausgeführt...
 
LaunchAgents werden erst beim einloggen eines benutzers geladen...
nimm LaunchDaemons, dort wird es dann auch als root ausgeführt...

Das hatte ich schon einmal probiert. Da jedoch das shell script einfach terminiert wenn es zu ende ist (was ja auch völlig ok ist), wird nach 10 Sekunden das Script nochmal gestartet und nach 10 Sekunden nochmal, usw...

Applescript ist indes keine Lösung, da das Script unabhängig vom Nutzer gestartet werden soll. Wenn ich das Applescript nutze, dann muss ich immer das admin-Kennwort eingeben, was natürlich ein Nutzer des Systems nicht kennen darf.
 
hast du das RunAtLoad nicht auf true gesetzt?
 
hast du das RunAtLoad nicht auf true gesetzt?

Doch. Folgendes Script habe ich jetzt in /Library/LaunchDaemons/ gepackt. Wenn ich die KeepAlive-Option rausnehme, dann startet es, allerdings wird es alle 10 Sekunden neu gestartet.

Als Anleitung habe ich folgende Seite verwendet:

Code:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyLi
st-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>net.mayuka.firewall</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <dict>
                <key>SuccessfulExit</key>
                <false/>
        <dict>
        <key>ProgramArguments</key>
        <array>
                <string>/Library/StartupItems/Firewall/Firewall</string>
        </array>
        <key>WatchPaths</key>
        <array>
                <string>/Library/StartupItems/Firewall/Firewall</string>
        </array>
</dict>
</plist>

Noch irgendwelche Ideen? Ich glaub ich bin nah dran.... :confused:
 
Zumindest ist das KeepAlive schonmal Schuld daran das Dein Skript immer wieder gestartet wird ( genau das macht Launchd wenn diese Option gesetzt ist und das Programm dazu terminiert). Nimm Die also schonmal heraus.

Schiebe das Skript nach /Library/LaunchDaemons/ dort wird es dann während des Bootens ausgeführt. Hier mal ein Skript von mir das so auch funktioniert ( ist halt von Hand ohne Lingon gebaut):

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>org.tigris.subversion.svnserve</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/svnserve</string>
                <string>-d</string>
                <string>-r</string>
                <string>/Users/Shared/svnrepos/</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>
 
was soll das WatchPaths?
du willst doch nicht den ordner überwachen....
 
Zumindest ist das KeepAlive schonmal Schuld daran das Dein Skript immer wieder gestartet wird ( genau das macht Launchd wenn diese Option gesetzt ist und das Programm dazu terminiert). Nimm Die also schonmal heraus.

Schiebe das Skript nach /Library/LaunchDaemons/ dort wird es dann während des Bootens ausgeführt. Hier mal ein Skript von mir das so auch funktioniert ( ist halt von Hand ohne Lingon gebaut):

Oh.... Es funktioniert jetzt. Yippeeeee.. :cake::cake::cake::cake::)

Wenn ich die ProgramArguments nach vorne schiebe und die anderen Parameter darunter, dann geht es auf einmal. Hier das funktionierende Script:

Code:
?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyLi
st-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>net.mayuka.firewall</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Library/StartupItems/Firewall/Firewall</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <dict>
                <key>SuccessfulExit</key>
                <false/>
        </dict>
        <key>WatchPaths</key>
        <array>
                <string>/Library/StartupItems/Firewall/Firewall</string>
        </array>
</dict>
</plist>
 
was soll das WatchPaths?
du willst doch nicht den ordner überwachen....

Das sollte dafür sein, dass wenn ich das Firewall-Script mal überarbeiten sollte, er die Firewall-Regeln automatisch neu anpasst. :D
 
Ja XML will wohlgeformt sein :)
 
Zurück
Oben Unten