【问题标题】:python pickle issue with cron jobcron作业的python泡菜问题
【发布时间】:2016-03-24 10:24:58
【问题描述】:

我正在使用 python pickle 创建一个对象并存储在配置文件中。如果没有 cron 作业,我可以运行脚本并生成 config.pkl。但是,一旦我将它放入 cron 作业中,我就无法生成 config.pkl,但会生成日志“调用 generateConfig”。该文件具有执行权限。

下面是函数和cron作业。

def generateConfig():
       print "calling generateConfig"
       configDict = {"test1":"value1","test2":"value2"}
       output = open('config.pkl','wb')
       pickle.dump(configDict, output)
       output.close

crontab:

00 05 * * * /user/bin/python ~/job/process.py

【问题讨论】:

  • 您确定python 在您的平台中的/user/bin 中吗?在大多数 Linux 中,它通常位于/usr/bin。您是否也绝对确定 cronjob 生成了 "calling generateConfig" 而不是手动运行的残留物?
  • 嗨@alvits,对不起,我在这个论坛上的错字。我仔细检查了,cron 作业是 /usr/bin/python

标签: python python-2.7 cron


【解决方案1】:

由于您没有提供config.pkl 的路径,我猜它会将该文件转储到运行它的用户的主目录中;如果它没有放在那里,请尝试搜索您的系统。如果没有记录任何错误,那么该文件很可能在某处,而不是您期望的位置。

try/catch 中包装任何可能产生异常的东西(例如写入文件)并明确处理或记录问题也是一种很好的做法,这样您至少可以保持对脚本执行的控制;在这种情况下,如果您最终尝试腌制资源,您的脚本可能会在不关闭该文件句柄的情况下死掉。使用 'with open(...) as output: 是一个不错的选择。

【讨论】:

  • 嗨@kungphu,我应该硬编码config.pkl的路径吗?我尝试了 output = open('~/job/config.pkl','wb') 但仍然无法在 ~/job 目录中找到
  • 你搜索过相关用户的主目录吗?我建议从硬编码开始,例如,open('/tmp/config.pkl', 'wb') 并查看文件是否显示在 tmp 中。如果是这样,那么很可能是路径/配置问题,您将希望使用绝对路径而不是相对路径。如果不是,则可能有其他问题,并且可能需要更多的输出/错误捕获以进行诊断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2012-02-26
  • 2012-08-01
  • 2011-08-18
  • 2023-03-08
  • 2015-08-19
  • 2021-08-12
相关资源
最近更新 更多