Existem duas maneiras de editar uma crontab:
interativamente, usando crontab -e, que abrirá o crontabno editor especificado por $VISUALou $EDITOR, ou
de forma não interativa, usando crontab crontab.txt, que simplesmente importará as crontabentradas do arquivo crontab.txt, substituindo o crontab ativo existente para o usuário atual.
O problema que você tem é que você está simplesmente usando o crontabcomando errado.
O seguinte diz respeito à manipulação não interativa de crontab:
Portanto, para remover tarefas específicas programaticamente, você pode fazer algo como
$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt
onde PATTERNé uma expressão regular que corresponderá às tarefas que você deseja remover. Aqui, crontab -lvocê fornecerá seu atual crontab.
Ou, se você tiver entradas em um arquivo chamado crontab-fragment.txt que deseja remover do crontab ativo,
$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt
Isso lê o crontab atual e filtra (remove) qualquer linha que também ocorra no arquivo crontab-fragment.txtno diretório atual (usando uma comparação de cadeias de linhas completas). O resultado é salvo crontab.txte carregado a partir daí para substituir o crontab atual.
Para adicionar uma ou várias tarefas , faça algo como
$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt
Isso pressupõe que o arquivo crontab-fragment.txtcontenha as entradas que você deseja adicionar. Ele lê o crontab atual, acrescenta as entradas de crontab-fragment.txtpara isso e cria crontab.txt. O crontab.txtarquivo substitui o crontab atual.