AppleScript beim Start und zu einer bestimmten Zeit

Ich versuche, ein Start-AppleScript und ein AppleScript auszuführen, das zu einer festgelegten Zeit ausgeführt wird (ich hasse den Automator / Calendar-Ansatz).

on idle

    set currentTime to current date
    if the weekday of currentTime is (need to do for Tuesday to Saturday) then
        do shell script "kextunload /System/Library/Extensions/AppleHDA.kext " password "..." with administrator privileges

    end if

    --only check once a day
    return 24 * 60 * 60
end idle

Das einzige Problem bei diesem Ansatz ist das Skript, das ständig ausgeführt wird und Speicher verwendet. Außerdem bin ich mir noch nicht sicher, wie ich die richtige Zeit berechnen soll. (24.60.60 ist immer 00:00, richtig?) Ich möchte es um 05:00 Uhr ausführen

Wenn ich es richtig verstehe, führt das Hinzufügen der script.scpt zu /Library/LaunchDaemons dazu, dass das Skript die ganze Zeit ausgeführt wird, auch wenn der Benutzer abgemeldet ist, oder sich mit dem Bildschirmschoner richtig anmeldet?

Ich habe über einen anderen Ansatz gelesen, der noch besser zu sein scheint und im Grunde eine Plist verwendet, um ein Skript zu einer festgelegten Zeit zu starten.

PS: Würde das alles funktionieren, wenn die Platte verschlüsselt ist? und kann ich AppleScript verwenden, um einen Benutzer beim Booten mit ausgeschaltetem Bildschirm (oder diskret) anzumelden, damit ich einige Apps öffnen kann, ohne Sicherheitsprobleme zu haben.

Kann ich Ihre Hilfe und Ratschläge haben, welcher Ansatz der beste ist? Vielen Dank im Voraus.

Gibt es eine besondere Notwendigkeit, AppleScript hier zu verwenden? Die Ausführung an bestimmten Daten/Zeiten kann direkt über (oder ) kextunloaderfolgen . launchdcron
danke, ich werde darüber lesen, im Grunde möchte ich einen Terminalbefehl mit eingeschaltetem Bildschirmschoner ausführen (internen Lautsprecher ausschalten, Speicher löschen, eine App öffnen (von der ich nicht glaube, dass sie mit eingeschaltetem Bildschirmschoner funktionieren kann)
Es macht einen großen Unterschied in Bezug auf die Herangehensweise, ob Sie einige Befehle ausführen möchten, die Sie normalerweise in Terminal ausführen (z. B. kextunload), oder ob Sie einige Anwendungen ausführen möchten. Sie erhalten wahrscheinlich bessere Antworten, wenn Sie Ihre Frage so bearbeiten, dass Ihre Absicht klar zum Ausdruck kommt, ohne bereits Annahmen über mögliche Lösungen und deren Nachteile zu treffen.

Antworten (1)

Sie können beim Start einen Befehl mit einer launchd-Plist ausführen, die in etwa so aussieht, in /Library/LaunchDaemons

<?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>NameYourTask</string>
    <key>ProgramArguments</key>
    <array>
    <string>CommandToRun</string>
    </array>
</dict>
</plist>

Um zu einer bestimmten Zeit zu laufen, verwenden Sie so etwas (dies läuft Montag, 1 Uhr morgens):

<?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>JobName</string>
        <key>ProgramArguments</key>
        <array>
            <string>CommandToRun</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>1</integer>
            <key>Minute</key>
            <integer>0</integer>
            <key>Weekday</key>
            <integer>1</integer>
        </dict>
        <key>StandardOutPath</key>
            <string>LogFilePath</string>
        <key>StandardErrorPath</key>
            <string>LogFilePath</string>
    </dict>
</plist>

LaunchD hat viele Optionen, wie die Jobs ausgeführt werden können - es kann Prozesse überwachen und am Laufen halten, ausgeführt werden, wenn Netzwerke oder Dateien vorhanden sind usw.

Es sieht so aus, als müssten Sie Ihre Anforderungen definieren und dann ausarbeiten, wie Sie die Jobs implementieren.

Nicht darunter ist die Befehlszeichenfolge eine einzelne Zeichenfolge. Wenn Sie Argumente übergeben möchten, können Sie dies mit mehreren String-Tags tun.

<array>
    <string>Command</string>
    <string>Arg1</string>
    <string>Arg2</string>
    <string>Arg3</string>
    <string>Arg4</string>
</array>
Danke, ich werde das versuchen, das viel besser zu sein scheint als mein aktuelles Skript.