Como definir permissões para que o job seja executado a partir do cron

2

Eu tenho script python que funciona bem. Eu quero executá-lo como um cron job a cada 10 minutos

Eu fiz crontab -e e entrei na linha

*/10 * * * * root python /path/to/script/script.py

Não parece estar em execução.

Então eu brinquei na linha de comando e vi em que ponto ele parou de funcionar. Ele é executado em seu diretório e cada um precedendo até que eu saia do meu diretório home (ou seja, se eu estiver em /home/henry/ , então ele é executado, mas se eu estiver, por exemplo, /var , então não funciona) quando recebo um erro de permissão ao tentar gravar em um arquivo.

# save this for next time
with open(mycsvfile, "w") as outfile:
    writer = csv.writer(outfile)
    writer.writerows([s.strip().encode("utf-8") for s in row ]for row in list_of_rows)
outfile.close()

Já fiz chmod +x /home/user/Location/Of/Script para garantir que o script tenha acesso (pensei). o que estou perdendo? Obrigado pela sua ajuda

    
por HenryM 02.11.2016 / 15:27

1 resposta

4

Remova a string root (assumindo que python exista no cron defined PATH , caso contrário use o caminho absoluto, por exemplo, /usr/bin/python ):

*/10 * * * * python /path/to/script/script.py
*/10 * * * * /usr/bin/python /path/to/script/script.py

Por que:

  • Quando você usa crontab -e para abrir uma tabela cron, você está abrindo o campo crontab do usuário solicitante, nenhum campo de nome de usuário é permitido (diferentemente de /etc/crontab e /etc/cron.d/* )

  • Como está agora, você está executando o comando root (que presumivelmente não está disponível) com os argumentos python e /path/to/script/script.py

Além disso, se você tiver tornado o script executável, deverá adicionar um shebang indicando o interpretador de script (por exemplo, /usr/bin/python ) em vez de executar o script como um argumento para o interpretador. Então você pode fazer:

*/10 * * * * /path/to/script/script.py
    
por heemayl 02.11.2016 / 15:29