【问题标题】:Python : subprocess is not working in crontabPython:子进程在 crontab 中不起作用
【发布时间】:2018-11-27 06:54:50
【问题描述】:

extract.py

def extract_lz4(lz4_path):
    status = subprocess.call(["lz4", "-df", lz4_path], stderr=subprocess.STDOUT)
    log.info("In Extract fun STATUS : {}".format(status))
    if not status:
        log.info("Extract Successful of {}".format(lz4_path))
        return status
    else:
        log.info("Extract Successful of {}".format(lz4_path))
        return status

Main.py

 lz4_file = '<path-to-lz4-file>/ly486imc83e0v9a7-23-telnet-banner-full_ipv4-20180515T040003-zmap-results.csv.lz4'

 extract_status = extract_lz4_task(lz4_file)
 log.info("extract_status : {}".format(extract_status))

当我通过python &lt;path-to-file&gt;/main.py 调用主文件时,它将成功提取。 但是当我把它放在 crontab 中时,它不会提取

crontab -e

* * * * * python <path-to-file>/main.py

我有什么遗漏吗?任何帮助将不胜感激

【问题讨论】:

  • lz4 可能不在路径中? crontab 没有设置与您的帐户相同的路径。还要检查lz4_path 是否正确。另外,检查异常并将其记录在一个文件中,这样“它不会提取”将变为“我有错误的回溯”
  • extract_lz4 不返回值,因此 extract_status 将为 None,现在看到它确实... 编辑意味着 while ?
  • 运行时的 cron 输出是什么?如果是路径问题,您可以在 cron 中尝试:( cd ; python )
  • 子进程返回0,不是说那个进程会成功吗?我提供完整的lz4_path
  • 将此附加到您的 crontab 条目:> /tmp/logfile 2>&1

标签: python python-2.7 cron subprocess lz4


【解决方案1】:

尝试使用以下命令调试您的 cron:

tail /var/log/cron

或者添加日志文件

$ crontab -e
  * * * * * python <path-to-file>/main.py >> <path-to-file>/cron.log 2>&1

【讨论】:

  • cron.log 正在保存 csv 中的所有数据。这是怎么回事?
  • 这意味着 main.py 从 csv 发送数据作为函数输出。
  • main..py 只是用于调用提取函数,那么它如何在提取之前从 csv 发送数据?
  • 深入了解后,我认为这都是关于stderr=subprocess.STDOUT2&gt;&amp;1 在我们的例子中它的工作方式为1&gt;&amp;2,所以请尝试从没有cron 的cmd 输入python &lt;path-to-file&gt;/main.py &gt;&gt; &lt;path-to-file&gt;/cron.log
  • 与 cron 的输出相同。 cron.log充满了csv数据
猜你喜欢
  • 2016-08-15
  • 2013-10-15
  • 1970-01-01
  • 2017-12-08
  • 2014-10-14
  • 2018-12-06
  • 2020-02-20
  • 2019-04-17
  • 1970-01-01
相关资源
最近更新 更多