2013-08-26 6 views
1

Я занимаюсь разработкой Django-питон проекта и застрял в этом Джанго-кронтаб для резервного копирования файлов автоматизировать, это код:Crontab Работы не выполнить сценарий оболочки

В моем settings.py

INSTALLED_APPS = (
. 
. 
. 
'django-crontab', 
) 

CRONTAB_DJANGO_MANAGE_PATH = '/home/path/to/my/project/manage.py' 

CRONJOBS = [ 
      ('25 15 * * *', 'cd /home/path/to/my/project && /usr/bin/sh myscript.sh'), 
     ] 

в myscript.sh

#!/bin/sh 
set -e 
cd /home/path/to/my/project/ 
exec cp file some_dir/copy_file 

Я проверить этот код на моем сервере для запуска в 15:25 часов, и это не выполняет myscript.sh

Сценарий просто копирует файл в другой каталог (для резервного копирования), и я проверил вручную, используя ./myscript.sh на сервере, скрипт работает хорошо ...

Я пытался различать методология, но ничего, кажется Works

Я беру справку из Джанго-кронтаб (https://pypi.python.org/pypi/django-crontab/0.5.1) и этот сайт (https://superuser.com/questions/81262/how-to-execute-shell-script-via-crontab) + http://github.com/kraiz/django-crontab

EDIT

Я добавить свой cronjob с помощью этой команды, а

python manage.py crontab add 

Я проверил работу есть ли с помощью этой команды

python manage.py crontab show 

РАБОЧИЙ ПРИМЕР

settings.py

CRONJOBS = [ 
      # Auto Backup Database everyday at 4 am 
      ('0 4 * * *', 'django.core.management.call_command', ['dumpdata', 'myproject'], {'indent': 4, 'use_natural_keys': True}, '> /home/mydirectory/myproject_backup/myproject_backup.json'), 
     ] 

myproject_backup.json

[ 
{ 
    "pk": 1, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "permission", 
     "name": "permission", 
     "app_label": "auth" 
    } 
}, 
{ 
    "pk": 2, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "group", 
     "name": "group", 
     "app_label": "auth" 
    } 
}, 
{ 
    "pk": 3, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "user", 
     "name": "user", 
     "app_label": "auth" 
    } 
}, 
{ 
    "pk": 4, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "contenttype", 
     "name": "content type", 
     "app_label": "contenttypes" 
    } 
}, 
{ 
    "pk": 5, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "session", 
     "name": "session", 
     "app_label": "sessions" 
    } 
}, 
{ 
    "pk": 6, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "site", 
     "name": "site", 
     "app_label": "sites" 
    } 
}, 
{ 
    "pk": 7, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "logentry", 
     "name": "log entry", 
     "app_label": "admin" 
    } 
}, 
{ 
    "pk": 8, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "poll", 
     "name": "poll", 
     "app_label": "polls" 
    } 
}, 
{ 
    "pk": 9, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "choice", 
     "name": "choice", 
     "app_label": "polls" 
    } 
}, 
{ 
    "pk": 10, 
    "model": "contenttypes.contenttype", 
    "fields": { 
     "model": "cronjoblog", 
     "name": "cron job log", 
     "app_label": "django_cron" 
    } 
}, 
{ 
    "pk": "1g6s3bly0gu6pn7spllerdw1n8sus08a", 
    "model": "sessions.session", 
    "fields": { 
     "expire_date": "2013-09-04T05:48:32Z", 
     "session_data": "YTg4Y2I3OWM3Nzg4NmIyOGE2NmJiZDAxYmYwMGNiYWI3Zjg5OGFmMDqAAn1xAShVEl9hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAQF1Lg==" 
    } 
}, 
{ 
    "pk": "j7ifcyfzfhentb5tx9492fphdf20g2qp", 
    "model": "sessions.session", 
    "fields": { 
     "expire_date": "2013-09-11T04:54:37Z", 
     "session_data": "YTg4Y2I3OWM3Nzg4NmIyOGE2NmJiZDAxYmYwMGNiYWI3Zjg5OGFmMDqAAn1xAShVEl9hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAQF1Lg==" 
    } 
}, 
{ 
    "pk": "m21on2le3kti3ezexzei1vpox57x8qgv", 
    "model": "sessions.session", 
    "fields": { 
     "expire_date": "2013-09-05T06:29:00Z", 
     "session_data": "YTg4Y2I3OWM3Nzg4NmIyOGE2NmJiZDAxYmYwMGNiYWI3Zjg5OGFmMDqAAn1xAShVEl9hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAQF1Lg==" 
    } 
}, 
{ 
    "pk": "x16t71c19o93kukwu5mvog1g76ynv3ip", 
    "model": "sessions.session", 
    "fields": { 
     "expire_date": "2013-09-04T07:07:46Z", 
     "session_data": "YTg4Y2I3OWM3Nzg4NmIyOGE2NmJiZDAxYmYwMGNiYWI3Zjg5OGFmMDqAAn1xAShVEl9hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAQF1Lg==" 
    } 
}, 
{ 
    "pk": 1, 
    "model": "sites.site", 
    "fields": { 
     "domain": "example.com", 
     "name": "example.com" 
    } 
}, 
{ 
    "pk": 1, 
    "model": "polls.poll", 
    "fields": { 
     "pub_date": "2013-08-21T05:56:00Z", 
     "question": "What are you doing?" 
    } 
}, 
{ 
    "pk": 2, 
    "model": "polls.poll", 
    "fields": { 
     "pub_date": "2013-08-21T05:58:00Z", 
     "question": "What's on your mind?" 
    } 
}, 
. 
. 
] 

Если кто-то может помочь, я был бы очень признателен: S

ответ

0

Наконец после вытаскивания моих волос в течение нескольких дней, я нашел рабочий раствор.

  1. я Войти на сервер с помощью шпатлевки (SSH)
  2. Типа вводе команды: crontab -e
  3. Вы увидите список заданий кронтаба
  4. Добавить свою работу непосредственно, я напечатал:

    0 3 * * * cp -pRu/home/path/to/my/project/file_dir/home/path/to/my/backup/dir

Это будет только скопировать новый файл/реж основанный на временных меток в file_dir для backup_dir каждый день в 3 утра

  1. После законченного типа, нажмите ESC, затем CTRL + х, он будет просить вы хотите сохранить, просто введите Y, то нажмите ENTER, чтобы сохранить файл.
  2. Проверить все задания crontab по типу: crontab -l
  3. Вот и все! Приветствую человека!

Надеюсь, это поможет кому-то, кто получил подобную проблему: D

PS: спасибо Игорю и zsquare, а также.

1

Кронобы, которые вы планируете в своих настройках, на самом деле не добавляются в crontab, пока вы не запустите python manage.py crontab add.

RTD

+0

Привет, zsquare, спасибо за ваш ответ. Фактически, я использовал эту команду, чтобы выполнить другие cronjobs и работать хорошо. Проблема заключается в том, что вышеупомянутый cronjob не выполняет работу, а другой - хорошо. Может быть, я пропустил некоторые настройки, но я этого не понял :( –

1

См формат Джанго кронтаб:

#format 1 
required: cron timing (in usual format: http://en.wikipedia.org/wiki/Cron#Format) 
required: the python module path to the method 
optional: a job specific suffix (f.e. to redirect out/err to a file, default: '') 

#format 2 
required: cron timing (in usual format: http://en.wikipedia.org/wiki/Cron#Format) 
required: the python module path to the method 
optional: list of positional arguments for the method (default: []) 
optional: dict of keyword arguments for the method (default: {}) 
optional: a job specific suffix (f.e. to redirect out/err to a file, default: '') 

В обоих случаях вам нужно использовать методы питона, а не только команды из оболочки. Вам не разрешено писать что-то вроде 'cd ...; ./command '; вы должны обернуть эту строку в модуль python в своем коде.

Подробнее об этом:

+0

Привет, Игорь, спасибо за ваш ответ. Это то же самое, и я тоже пробовал это ... Это действительно странно, если я выполняю непосредственно используя команду ./myscript.sh, она отлично работает ... Проблема в том, что предел документации о django-crontab (только этот -> https://github.com/kraiz/django-crontab) –

+0

Can добавьте некоторую фиктивную команду в crontab, чтобы убедиться, что она работает? Например, «date >> /tmp/date.log», за каждую минуту «* * * * *»? –

+0

Добавлен рабочий пример с использованием django -crontab ... –

Смежные вопросы