erro enquanto cron agendou um script sh

1

Este é o meu script de shell que eu quero agendar usando o cron job.

parser.sh

#!/bin/bash

source .profile
workon venv
cd /home/ashish/deployments/myproject

export DJANGO_SETTINGS_MODULE=myproject.settings_production
python /home/ashish/deployments/myproject/myproject/manage.py parse_data

Trabalho Cron -

*/15 * * * * . /home/ashish/parser.sh

Sempre que essa tarefa do cron é executada, recebo uma mensagem com erros:

/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found
Traceback (most recent call last):
  File "/home/ashish/deployments/myproject/myproject/manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

Quando eu executo este script no terminal -

. parser.sh    #this gives no error

sh parser.sh   #this gives errors
/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found

Qual pode ser o possível erro neste script?

    
por Ashish Gupta 03.05.2015 / 14:16

2 respostas

3
*/15 * * * * . /home/ashish/parser.sh

cron usa sh , não bash , portanto, quando você origina o script (é o que o . faz), ele é executado com sh , não bash . Remova o . .

Além disso, o PATH do cron é limitado. Especifique os caminhos completos para os comandos que você usa, como workon , ou defina PATH .

    
por muru 03.05.2015 / 14:21
0

Para executar o script como se estivesse rodando em sua própria conta (com o bash), altere seu crontab para o seguinte:

*/15 * * * * sudo -u ashish /home/ashish/parser.sh

Isso executará o script quase como se você o executasse a partir da linha de comando em sua própria conta.

    
por rndm 03.05.2015 / 14:35