我的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"
答案 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
应允许其后面的命令在那里查找模块而不是两个级别。