2

Я следую советам по использованию crontab онлайн, и я запустил sudo crontab -e , и мой файл cron:

MAILTO=cchilder@mail.usf.edu

* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py

Он ничего мне не посылает, но, что еще хуже, я проверяю свой журнал git на наличие проекта, в который я внес изменения, а update_projects вообще не работает. Когда я запускаю его вручную, он работает как положено. Из всего, что я прочитал, я действительно думал, что cronjobs были простыми, и просто нужно время (5 символов) и путь к сценарию.

Я попытался протестировать вызов скрипта, чтобы убедиться, что и путь Python, и путь скрипта верны. Для этого я сделал crontest.sh:

#!/bin/bash

/usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py

Crontest.sh работает при вызове из терминала. Я не загрузил его в пользовательские crontab, sudo crontab, и все же он не работает.

Пользователь crontab:

* * * * * /home/cchilders/scripts/bash/crontest.sh

* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py

Судо crontab:

MAILTO=cchilder@mail.usf.edu

* * * * * /home/cchilders/scripts/bash/crontest.sh

* * * * * /home/cchilders/scripts/python/scripts-in-progress/update_projects.py

Что плохого в этом, если путь правильный? Спасибо

update_projects.py выглядит следующим образом и работает с терминала:

#!/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)

1 ответ1

1

Поместите /usr /bin /python в запись crontab.

* * * * * /usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .