
Estoy intentando hacer un pequeño script que, como función, tomará un archivo y una fecha como entrada y eliminará ese archivo en la fecha especificada. Así que sólo necesito programarlo para que se ejecute una vez y listo.
Estoy en OSX y he estado mirandoen, pero no solo he tenido problemas para crear scripts, sino que tengo entendido (he estado investigando todo el día) que servicios como at
y cron
quedarán obsoletos en OSX en favor de launchd
.
Por lo que he visto, Launchd no sólo es demasiado complicado para esto, sino que parece que no puedo entender cómo usarlo pararealizar una acción única en una fecha y hora específicas(que es realmente todo lo que necesito).
Me gustaría recibir ayuda con esto, por favor. Prefiero no usaren, e idealmente es una solución que no requerirá que el usuario instale cosas adicionales. También debe ser programable (es decir, línea de comando). Si tengo que usar launchd
, que así sea, pero realmente necesita poder usar una hora y fecha específicas.
Respuesta1
Seguro que cron y at están en desuso, pero probablemente no vayan a ninguna parte (incluso si lo hicieran, no debería ser difícil reinstalarlos).
Si realmente quisiera hacer eso con launchd, tendría que guardar y cargar una lista de propiedades en el primer script y luego descargarla y eliminarla en el segundo script.
#!/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
El segundo guión podría verse así:
plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test
Si usó at, primero deberá habilitarlo con sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
. Aquí hay algunos ejemplos copiados de mi sitio web:
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