Como Sven disse, a melhor solução seria usar logrotate
ou ferramentas similares projetadas para isso.
No entanto, para explicar, existem dois problemas.
Você não especificou um usuário como o cron deve ser executado.
E, em segundo lugar, a parte %F
.
Você precisa escapar do%, conforme descrito em man 5 crontab
:
The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.
Então, isso:
0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +\%F)
Deve funcionar.