Django Crontab Jobs没有';不执行shell脚本

Django Crontab Jobs没有';不执行shell脚本,django,shell,python-2.7,crontab,Django,Shell,Python 2.7,Crontab,我正在开发django python项目,一直在做django crontab以实现自动文件备份,代码如下: 在my 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/pro

我正在开发django python项目,一直在做django crontab以实现自动文件备份,代码如下:

在my 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'),
        ]
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'),
        ]
在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进行了手动测试,脚本运行良好

我一直在尝试各种方法,但似乎都不管用

我从django crontab()和这个站点()获取引用

编辑

我也使用这个命令添加了cronjob

python manage.py crontab add
我已使用此命令检查了作业是否存在

python manage.py crontab show
工作示例

设置.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'),
        ]
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?"
    }
},
.
.
]

如果有人能提供帮助,我将不胜感激:除非您运行
python manage.py crontab add
,否则您在设置中安排的cronjobs实际上不会添加到crontab中


请参见django crontab的格式:

#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: '')
在这两种情况下,您都需要使用python方法,而不仅仅是来自shell的命令。 你不允许写像“cd…”这样的东西/命令';您应该在代码中将这一行包装到python模块中

更多信息:


    • 最后,在拔了几天头发后,我找到了有效的解决方案

    • 我使用putty(SSH)登录到服务器
    • 键入命令:
      crontab-e
    • 您将看到crontab作业的列表
    • 直接添加我的作业,我键入:

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

    • 这将仅在每天凌晨3点根据文件目录中的时间戳将新文件/目录复制到备份目录

    • 完成键入后,按ESC键,然后按CTRL+x,它会询问您要保存,只需键入Y,然后按ENTER键保存文件
    • 按类型检查所有crontab作业:
      crontab-l
    • 就这样!干杯,伙计 希望它能帮助有类似问题的人:D


      PS:也感谢Igor和zsquare。

      嗨,zsquare,谢谢你的回答。事实上,我一直在使用该命令执行另一个cronjobs并运行良好。问题是上面的cronjob没有执行作业,而另一个运行良好。也许我错过了一些设置,但我还没有弄明白:(嗨,Igor,谢谢你的回复。这是同样的事情,我也尝试过这个方法……如果我直接使用命令执行,这真的很奇怪。/myscript.sh,它工作得很好……问题是关于django crontab的文档限制(只有这个-->)您能否向crontab添加一些虚拟命令,以确保其正常工作?例如“date>>/tmp/date.log”,每分钟“***”啊,对不起,我的不好,我忘了提到我在我的settings.py中声明了它-->CRONTAB_DJANGO_MANAGE_PATH='/home/PATH/to/my/project/MANAGE.py',它适用于dumpdata命令。这没关系。无论如何,这里不允许使用shell命令。你能创建一个运行myscript.sh的python方法/函数吗?我怀疑decla定量冲突,我的意思是我不应该为执行.sh文件声明manage_路径,而必须为dumpdata命令声明manage_路径。。。