crontab没有完全正常工作。只运行echo语句

时间:2016-09-20 16:32:26

标签: python bash cron

我的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"

1 个答案:

答案 0 :(得分: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

应允许其后面的命令在那里查找模块而不是两个级别。