Script de shell do Crontabbed não é capaz de criar / gravar em um arquivo

3

Eu escrevi um script de shell simples para fazer backup das tabelas no meu banco de dados usando o comando mysqldump . O comando simplesmente despeja o banco de dados em um arquivo dbName.sql . No entanto, se o arquivo dbName.sql ainda não existir e eu crontab esse script de shell, ele não funciona. Qual seria a razão? Os scripts do crontab não têm permissão para criar e gravar em arquivos?

    
por Nikster2014 31.01.2015 / 03:10

1 resposta

2

Os trabalhos Cron podem ser executados como root ou outro usuário especificado. Se esse usuário não tiver permissão para gravar no arquivo .sql , a tarefa falhará.

Se o arquivo existir e tiver permissão de gravação para o usuário que está executando o trabalho, o arquivo será gravado.

se o arquivo não existir e o usuário não tiver permissão para criar arquivos no diretório de destino, a tarefa falhará.

Eu geralmente posso dizer

sudo touch /var/log/foo.log
sudo chown my_username /var/log/foo.log

agora posso dizer:

echo bar > /var/log/foo.log

mas, se o arquivo não existir, ele falhará, pois não tenho permissão para criar arquivos em /var/log/ .

Portanto, a questão se torna se o usuário que está executando o trabalho tiver o direito de criar arquivos, onde a saída de mysqldump seja gravada.

Agora, se eu configurar um cron job para executar um script com isso:

date > /var/log/foo.log

a cada minuto, posso adicionar:

*  *    * * *   my-user-name  /path/to/script

para /etc/crontab . Como não tenho permissão para criar arquivos em / var / log /, o daemon do cron enviará um e-mail quando a tarefa falhar.

Após 1 minuto, não há arquivo. Eu vou para um terminal e digite mail :

$ mail
>N  1 Cron Daemon        Sat Jan 31 05:15   19/731   Cron <user@host>    /path/to/script
? type
...

/path/to/script: line 3: /var/log/foo.log: Permission denied

OK. Minha culpa. Eu crio o arquivo e faço isso para mim. Agora tudo está bem.

Veja também:

por 31.01.2015 / 05:25