O uso do cron é a maneira correta de agendar a execução periódica de tarefas na maioria dos sistemas Unix. Usar um crontab pessoal é a maneira mais conveniente para um usuário agendar suas próprias tarefas. As tarefas do sistema podem ser agendadas por root ( não usando o script abaixo! ) no crontab do sistema, que geralmente tem um formato um pouco diferente (um campo de usuário extra).
Aqui está um script simples para você. Qualquer usuário pode usar isso para gerenciar seu próprio crontab.
-
Ele não faz nenhum tipo de validação de sua entrada, exceto que ele irá reclamar se você fornecer poucos argumentos. Portanto, é completamente possível adicionar entradas crontab formatadas incorretamente.
-
O subcomando
remove
usa um número de linha e remove o que está nessa linha no crontab, independentemente do que seja. O número é passado, não-analizado, diretamente parased
. -
A entrada crontab, quando você adiciona uma, deve ser citada. Isso afeta como você deve manipular aspas dentro da própria entrada do crontab.
-
Ele usa
crontab.tmp
como nome de arquivo para armazenar um arquivo temporário no diretório atual, independentemente de o arquivo já existir ou não (ele será removido).
A maioria dessas coisas deve ser relativamente fácil para você corrigir.
#!/bin/sh
usage () {
cat <<USAGE_END
Usage:
$0 add "job-spec"
$0 list
$0 remove "job-spec-lineno"
USAGE_END
}
if [ -z "$1" ]; then
usage >&2
exit 1
fi
case "$1" in
add)
if [ -z "$2" ]; then
usage >&2
exit 1
fi
crontab -l >crontab.tmp
printf '%s\n' "$2" >>crontab.tmp
crontab crontab.tmp && rm -f crontab.tmp
;;
list)
crontab -l | cat -n
;;
remove)
if [ -z "$2" ]; then
usage >&2
exit 1
fi
crontab -l | sed -e "$2d" >crontab.tmp
crontab crontab.tmp && rm -f crontab.tmp
;;
*)
usage >&2
exit 1
;;
esac
Para usar:
$ ./script
Usage:
./script add "job-spec"
./script list
./script remove "job-spec-lineno"
$ ./script list
1 */15 * * * * /bin/date >>"$HOME"/.fetchmail.log
2 @hourly /usr/bin/newsyslog -r -f "$HOME/.newsyslog.conf"
3 @reboot /usr/local/bin/fetchmail
$ ./script add "0 15 * * * echo 'hello world!'"
$ ./script list
1 */15 * * * * /bin/date >>"$HOME"/.fetchmail.log
2 @hourly /usr/bin/newsyslog -r -f "$HOME/.newsyslog.conf"
3 @reboot /usr/local/bin/fetchmail
4 0 15 * * * echo 'hello world!'
$ ./script remove 4
$ ./script list
1 */15 * * * * /bin/date >>"$HOME"/.fetchmail.log
2 @hourly /usr/bin/newsyslog -r -f "$HOME/.newsyslog.conf"
3 @reboot /usr/local/bin/fetchmail