remova o bash, apenas tenha o seguinte e ele deve funcionar:
0 8 * * * /home/lampadmin/cron/my_db.sh
verifique também se my_db.sh é executável.
chmod a+x /home/lampadmin/cron/my_db.sh
Eu tenho um par de cron
trabalhos configurados para manter uma cópia local de um banco de dados remoto.
O primeiro faz o download da versão mais recente do banco de dados da máquina remota, que é executada todos os dias e está funcionando bem.
O segundo importa os dados baixados, mas não está funcionando.
O trabalho é apenas um script de shell simples:
#!/bin/bash
mysql -u root -mypass -h localhost my_db < my_db.sql
A tarefa cron é configurada assim:
0 8 * * * bash /home/lampadmin/cron/my_db.sh
Se eu executar o script de shell manualmente, tudo funciona bem.
O que posso fazer para descobrir por que não está funcionando no cron?
Tenho um mau pressentimento em tornar o arquivo executável para todos. Eu tentaria este perto da sua primeira ideia.
0 8 * * * /bin/bash /home/lampadmin/cron/my_db.sh
É sempre uma boa ideia executar comandos com o caminho completo. Você nunca sabe o que você vai conseguir de outra forma. Portanto, você também deve fornecer o caminho completo para my_db.sql
em seu arquivo my_db.sh
.
Mas além disso, tenho um sentimento ainda pior sobre a configuração da senha via linha de comando. Cada usuário pode ver a senha de root com o auxílio de ps
enquanto seu script está sendo executado.
Sugiro definir a senha por meio do arquivo .my.cnf
como este
[mysql]
user=root
password=rootpassword
no diretório inicial do usuário apropriado. Se essa abordagem for muito genérica para seus requisitos, você pode colocar isso em um arquivo extra /home/lampadmin/cron/my.cnf
e usar essas configurações com
/usr/bin/mysql --defaults-extra-file=/home/lampadin/cron/my.cnf -h localhost mydb < /pathto/my_db.sql
Em qualquer caso, apenas o usuário deve ter acesso ao seu my.cnf
para proteger sua senha. Você deveria usar
chmod go-rwx my.cnf
para conseguir isso.