Coloque o / usr / bin / python na entrada do crontab.
* * * * * /usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
Estou seguindo os conselhos sobre o uso de crontab on-line e executei sudo crontab -e
, e meu arquivo cron é:
[email protected]
* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
Ele não me envia nada, mas pior, estou verificando meu log do git em busca de um projeto para o qual fiz alterações, e update_projects não está sendo executado. Quando eu corro manualmente, funciona como esperado. De tudo o que li, eu realmente achei que os cronjobs eram simples e precisavam de um tempo (5 símbolos) e um caminho para um script.
Eu tentei testar o script chamando para garantir que o caminho do python e o caminho do script estejam corretos. Para isso, eu fiz crontest.sh:
#!/bin/bash
/usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
Crontest.sh funciona quando chamado do terminal. Eu não tenho carregado no crontab usuário, sudo crontab, e ainda não está em execução.
Crontab do usuário:
* * * * * /home/cchilders/scripts/bash/crontest.sh
* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
Crontab do Sudo:
[email protected]
* * * * * /home/cchilders/scripts/bash/crontest.sh
* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
O que há de errado nisso, se o caminho estiver correto? Obrigado
update_projects.py tem o seguinte aspecto e está a funcionar a partir do terminal:
#!/usr/bin/env python
import os, sys, time, subprocess
from os.path import expanduser
HOME = expanduser('~')
print 'running?
def call_sp(command, **arg_list):
#run that
p = subprocess.Popen(command, shell=True, **arg_list)
p.communicate()
def get_project_path():
i = 0
for root, dirs, files in os.walk(HOME):
if i >= 2:
return os.path.join(HOME, "projects")
i += 1
for this_dir in dirs:
if this_dir == "django_practice":
return os.path.join(HOME, "django_practice")
def update_projects(home_path):
i = 0
for root, dirs, files in os.walk(home_path):
for this_dir in dirs:
if this_dir.startswith("."):
continue
full_path = os.path.join(root, this_dir)
print full_path
time.sleep(2)
is_git_project = False
j = 0
for subroot, subdirs, subfiles in os.walk(full_path):
if j >= 1:
break
j += 1
if not ".git" in subdirs:
break
else:
is_git_project = True
if not is_git_project:
continue
d = {'cwd': full_path}
print 'git pull from {}'.format(full_path)
call_sp('git pull', **d)
time.sleep(2)
call_sp('git add -A', **d)
call_sp('git commit -m "automatic update"', **d)
call_sp('git push', **d)
dirs[:] = []
ppath = get_project_path()
update_projects(ppath)
Coloque o / usr / bin / python na entrada do crontab.
* * * * * /usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py