Я следую советам по использованию 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)