jak uruchomić cronjob co minutę

2

Postępuję zgodnie z poradami na temat używania crontab online, i uruchomiłem sudo crontab -e, a mój plik cron to:

[email protected]

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

Nic mi nie wysyła, ale co gorsza, sprawdzam dziennik git pod kątem projektu, w którym wprowadziłem zmiany, a update_projects w ogóle nie działa. Kiedy uruchamiam go ręcznie, działa zgodnie z oczekiwaniami. Ze wszystkiego, co przeczytałem, naprawdę myślałem, że cronjobs są proste i potrzebowałem tylko czasu (5 symboli) i ścieżki do skryptu.

Próbowałem przetestować wywołanie skryptu, aby upewnić się, że zarówno ścieżka Pythona, jak i ścieżka skryptu są poprawne. W tym celu stworzyłem crontest.sh:

#!/bin/bash

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

Crontest.sh działa po wywołaniu z terminala. Nie przesłałem go do crontab użytkownika, sudo crontab i nadal nie działa.

Crontab użytkownika:

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

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

Sudo crontab:

[email protected]

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

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

Co jest w tym złego, jeśli ścieżka jest prawidłowa? Dziękuję Ci

update_projects.py wygląda następująco i działa z terminala:

#!/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)
codyc4321
źródło
2
1) Czy twój skrypt ma ustawiony bit wykonywalny? 2) czy twój skrypt Python ma na początku linię shebang Python? #!/usr/bin/env python
nc4pk,
tak, mam to ... idk co masz na myśli przez # 1
codyc4321
1
uprawnienia są wysokie,-rwxrwxr-x. ... 17:32 update_projects.py
codyc4321
Co się stanie, jeśli umieścisz skrypt w pliku crontab użytkownika zamiast roota? ( crontab -ezamiast sudo crontab -e)
nc4pk
1
Miałem problemy, ponieważ crontabśrodowisko wykonywania nie jest takie samo jak normalny terminal i nie zawsze ma tę samą zmienną PATH. Spróbuj uruchomić skrypt powłoki, który jawnie działa pythonz pełną ścieżką (zwróconą przez which python), a następnie pełną ścieżką do skryptu. Zauważam również, że odwołujesz się ~do skryptu: będzie to katalog domowy, rootjeśli uruchamiasz go za pomocą sudo, więc chyba, że ​​tak naprawdę znajdują się tam twoje pliki, powinieneś zrobić, jak sugeruje @ncdownpat i uruchomić go od użytkownika crontab.
AFH,

Odpowiedzi:

1

Umieść / usr / bin / python we wpisie crontab.

* * * * * /usr/bin/python /home/cchilders/scripts/python/scripts-in-progress/update_projects.py
Jacek
źródło
co zaskakujące, nawet to nie działało. Wypróbowałem to w crontab użytkownika i sudo
codyc4321