Apesar de esta ser marcada como duplicada, eu a respondi porque o problema era que a sintaxe de cat
e crontab
estava desativada.
Não há crontab existente e sua sintaxe está desativada. Por exemplo, se eu fizer isso sem nenhum cron configurado, isso acontece:
$ crontab -l
no crontab for anon
E você está simplesmente enviando o conteúdo do documento aqui para stdout.
Primeiramente, crie um arquivo crontab como este:
cat <<- 'EOF' > cron.jobs
* * * * * cron-task1...
* * * * * cron-task2...
* * * * * cron-task3...
EOF
crontab cron.jobs
Em vez de confirmar, funcionou:
crontab -l
* * * * * cron-task1...
* * * * * cron-task2...
* * * * * cron-task3...
A razão pela qual não estava funcionando é porque crontab -l
simplesmente exibe o conteúdo do arquivo cron do usuário para stdout:
De man crontab
:
The -l option causes the current crontab to be displayed on standard output. See the note under DEBIAN SPECIFIC below.
Além disso, em vez de usar su
, você pode usar
cat cron.jobs |crontab -u user -
Juntando tudo, adicione isso a um script, diga cron.sh
e tente isto:
#!/bin/bash
user="$@"
cat <<- 'EOF' > cron.jobs
* * * * * cron-task1...
* * * * * cron-task2...
* * * * * cron-task3...
EOF
cat cron.jobs|crontab -u $user -
E então:
bash cron.sh username
Mas acho que o que você estava procurando era mais ou menos como:
cat <<< '
* * * * * cron-task1... ' |crontab -