【问题标题】:crontab not fully working. only echo statements being runcrontab 没有完全工作。只运行 echo 语句
【发布时间】:2016-09-20 16:32:25
【问题描述】:

我的 crontab 中有一份工作,每分钟运行一个脚本 (/home/sys_bio/username/tracer.sh)。该脚本包含

#!/usr/bin/env bash

echo "starting"
/home/sys_bio/username/p35/bin/python3.5 -m qefunctional.qe.tests.prodprobe -p post -j test.json
echo "finised"

当我在目录/home/sys_bio/username/ 中运行commany ./tracer.sh 时,它会按预期运行。

但是,当我将作业添加到 crontab 时,只有 echo 部分运行。

另外需要注意的是p35 是我的python3 所在的位置。所以/home/sys_bio/username/p35/bin/python3.5 是我运行所有python3 脚本的方式。

这就是我的 crontab 中的内容

* * * * * /home/sys_bio/username/tracer.sh >> /home/username/tracer.cron.txt

我正在创建 .txt 文件,但只保存了 echo 语句。

这可能看起来令人困惑,但目录结构是这样的:

   /home
      /sys_bio
         /username
            /qefunctional
               __init__.py
               /qe
                  __init__.py
                  /tests
                     __init__.py
                     prodprobe.py
            test.json
            /p35
               /bin
                  python3.5
            tracer.sh
      /username
         tracer.cron.txt

* 编辑 *

我可以在脚本中添加更多内容,以便将错误重定向到文件。脚本现在看起来像这样,我收到了这个错误:

/home/sys_bio/username/p35/bin/python3.5: Error while finding spec for 'qefunctional.qe.tests.prodprobe' (<class 'ImportError'>: No module named 'qefunctional')

脚本:

#!/usr/bin/env bash

echo "Starting Tracer POST"

/home/sys_bio/username/p35/bin/python3.5 -m qefunctional.qe.tests.prodprobe -p post -j /home/sys_bio/username/test.json  -d -v  2>/home/username/crontab.output

echo "Ending Tracer POST"

【问题讨论】:

  • 尝试使用test.json的绝对路径而不是相对路径...

标签: python bash cron


【解决方案1】:

可能需要包含 bash shell 的路径:

* * * * * /bin/sh /home/sys_bio/username/tracer.sh >> ...

cron 否则可能真的不知道该怎么做。

同样的原则也适用于脚本中包含的内容。使用相对文件名可能会失败,因为它们的解释通常与使用本地交互式 shell(例如)不同:

test.json

可能需要使用绝对路径(例如):

/full/path/to/test.json

编辑:从 Python 生成的错误中可以明显看出问题肯定与路径有关。 Python 试图在路径/home/sys_bio/username/p35/bin/python3.5 中定位模块,而不是在/home/sys_bio/username/ 中的两个目录中。修复方法是将cd 放入目录或提供模块的绝对路径。通过将以下内容添加到 .sh 脚本中:

cd /home/sys_bio/username

应该允许它后面的命令在那里寻找模块而不是向下两层。

【讨论】:

  • 在我的更改之后,它似乎是一个 python 错误 =[ 仍然不确定如何修复它。感谢您的帮助!非常感谢!
  • @Liondancer:发布您的 python 项目结构可能会有所帮助,因为您的问题现在似乎更多地与为什么它不能与 cron 一起使用有关。这可能是一些简单的东西,比如导入、初始化等。
  • 这里是更新的项目结构,谢谢! dpaste.com/1BQ839A也更新了问题
  • 我做了更多的挖掘工作,我想我需要激活一个virtualenv。有一个脚本我用来设置这一切。我现在有一个virtualenv 住在/tmp/username。要激活它,我可以做一个来源/tmp/username/bin/activate。现在在 cron 中设置这一切......
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多