在遇到local()时,crontab中的python脚本运行失败

时间:2016-07-01 16:58:20

标签: python crontab local fabric

我试图在crontab中运行python脚本。

jQuery(function () {

        var myStartDate = $('#myStartDate').val();

        jQuery('#startDate').datetimepicker({
            locale: 'de',
            format: 'dd, DD.MM.YYYY, HH:mm',
            minDate: moment(),          
        });
    });

python脚本如下所示:

5 0 * * *  python /home/hadoop/import_openapp.py >> /home/hadoop/openapp.out 2>&1

调用crontab时,日志文件如下:

import sys
import datetime
from fabric.api import local

ystd = datetime.date.today() - datetime.timedelta(days=1)
c = ystd.strftime('%Y-%m-%d')
print(c)
print('Start to format file ...')
......
print('Start to upload on HDFS ...')
local("/home/hadoop/hadoop/bin/hadoop fs -put " + finalfile + " /user/hadoop/yunying/openapp")
print('Start to upload on MaxCompute ...')
......

然后,过程结束了。我在2016-07-01 Start to format file ... Start to upload on HDFS ... [localhost] local: /home/hadoop/hadoop/bin/hadoop fs -put /data/uxin/nsq_client_active_collect/hadoop/openappfinal.log /user/hadoop/yunying/openapp

中找不到它

为什么会见ps -ef|grep python时结束?

1 个答案:

答案 0 :(得分:0)

PYTHONPATH可能无法正确设置CRON用于运行脚本的用户。打印出调试文件的路径以进行检查:

<div style="...">

尝试添加以下行:

with open('/path/to/debug_file.txt', 'wt') as f:
    f.write(str(sys.path))

导入本地

之前

您还可以使用

动态获取正在运行的文件的位置
sys.path.append("/path/to/fabric.api")

这将允许您在需要时使用相对路径