como fazer o cronjob rodar a cada minuto

2

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)
    
por codyc4321 07.07.2015 / 23:25

1 resposta

1

Coloque o / usr / bin / python na entrada do crontab.

* * * * * /usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
    
por 08.07.2015 / 15:39