Programar script bash para uso único no OSX

3

Estou tentando fazer um pequeno script que, como uma função, levará um arquivo e uma data como entrada e excluirá esse arquivo na data especificada. Então eu só preciso agendar para executar uma vez, e é isso.

Eu estou no OSX e tenho olhado em em , mas não só tenho tido problemas para criar scripts, como eu compreendo (tenho pesquisado o dia todo) que serviços como at e cron serão reprovados no OSX em favor de launchd .

Pelo que eu vi, não só é muito complicado para isso, eu não consigo descobrir como usá-lo para fazer uma ação única em uma data e hora específicas (que é realmente tudo que eu preciso).

Gostaria de receber ajuda sobre isso, por favor. Eu prefiro não usar em , e idealmente é uma solução que não exigirá que o usuário instale coisas extras. Também precisa ser programável por script (portanto, linha de comando). Se eu tiver que usar launchd , que seja, mas realmente precisa ser capaz de usar uma data e hora específicas.

    
por user137369 31.05.2012 / 20:58

1 resposta

2

O cron e o ature estão obsoletos, mas provavelmente não vão a lugar nenhum (mesmo que tenham sido, não seria difícil reinstalá-los).

Se você realmente quisesse fazer isso com o launchd, teria que salvar e carregar uma lista de propriedades no primeiro script e depois descarregá-lo e removê-lo no 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

O segundo script poderia se parecer com:

plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test

Se você usou em, primeiro precisa ativá-lo com sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist . Aqui estão alguns exemplos copiados do meu site:

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
    
por 01.06.2012 / 17:03