
Ich versuche, ein kleines Skript zu erstellen, das als Funktion eine Datei und ein Datum als Eingabe verwendet und diese Datei am angegebenen Datum löscht. Ich muss es also nur so planen, dass es einmal ausgeführt wird, und das war’s.
Ich bin auf OSX und habe mir angesehenbei, aber ich hatte nicht nur Probleme beim Skripting, sondern meines Wissens (ich habe den ganzen Tag recherchiert) werden Dienste wie at
und cron
unter OSX zugunsten von veraltet sein launchd
.
Soweit ich das sehe, ist launchd dafür nicht nur zu kompliziert, ich kann auch nicht herausfinden, wie ich es verwenden soll, umFühren Sie eine einmalige Aktion zu einer bestimmten Uhrzeit und einem bestimmten Datum aus.(das ist wirklich alles, was ich brauche).
Ich hätte gerne Hilfe dazu. Ich würde lieber nicht verwendenbei, und im Idealfall ist es eine Lösung, die vom Benutzer keine zusätzlichen Installationen erfordert. Außerdem muss sie skriptfähig sein (also über die Befehlszeile). Wenn ich verwenden muss launchd
, dann ist das so, aber es muss wirklich möglich sein, eine bestimmte Uhrzeit und ein bestimmtes Datum zu verwenden.
Antwort1
Sicher, cron und at sind veraltet, aber sie werden vermutlich nirgendwohin verschwinden (selbst wenn das der Fall wäre, sollte es nicht schwer sein, sie neu zu installieren).
Wenn Sie dies wirklich mit launchd tun wollten, müssten Sie im ersten Skript eine Eigenschaftenliste speichern und laden und sie dann im zweiten Skript entladen und entfernen.
#!/bin/bash
month=6
day=1
hour=18
minute=0
label=com.superuser.431145
agent=~/Library/LaunchAgents/$label.plist
plist="<?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>$label</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Month</key>
<integer>$month</integer>
<key>Day</key>
<integer>$day</integer>
<key>Hour</key>
<integer>$hour</integer>
<key>Minute</key>
<integer>$minute</integer>
</dict>
</array>
</dict>
</plist>"
echo "$plist" > $agent
launchctl unload $agent 2> /dev/null
launchctl load $agent
Das zweite Skript könnte so aussehen:
plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test
Wenn Sie at verwenden, müssen Sie es zuerst mit aktivieren sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
. Hier sind einige Beispiele, die von meiner Website kopiert wurden:
echo 'say test' | at now+5 # +5 and +5 seconds don't work
echo 'say test' | at +1 minute # +1 minutes results in an error
echo 'say test' | at +2 hours
echo say test > test.txt; at -f test.txt now+5
atq # at -l; list at queue
atrm 14 # at -d 14
atrm {1..9999} # remove all jobs