A menos que seu script não seja executável (conserte isso com chmod +x /root/backup_system.sh
) ou o crond não esteja em execução, não há nada obviamente quebrado em seu script que impeça sua execução.
Todos os comandos que você usa ( date
, hostname
, tar
e ls
) devem estar em /bin
, que deve estar no PATH padrão ... a menos que você tenha alterado no seu crontab.
A explicação mais provável é que você está tentando executar este script a partir do crontab de um usuário, em vez do crontab do root. E esse usuário não tem acesso de leitura e execução ao diretório /root
ou ao script /root/backup_system.sh
.
BTW, você deve sempre citar duas vezes suas variáveis. E é uma boa ideia usar uma variável de matriz para variáveis que contenham uma lista de coisas (como $backup_files
).
Aqui está uma versão melhorada do seu script que corrige esses problemas:
#!/bin/bash
backup_files=(/home /var/spool/mail /etc /root /boot /opt)
dest='/mnt/backup'
day=$(date +%F)
hostname=$(hostname -s)
archive_file="$dest/$hostname-$day.tgz"
echo "Backing up ${backup_files[@]} to $archive_file"
date
echo
tar czf "$archive_file" "${backup_files[@]}"
echo
echo "Backup finished"
date
ls -lh "$dest"