Crontab不会运行脚本

时间:2019-10-28 12:08:14

标签: python bash cron

我在树莓派上有个灯光秀。我还运行了crontab以使其自动化。当我在终端中运行脚本时,它可以正常运行并且可以完美运行。 cron运行时将无法正常工作。我将其设置为在放映前15秒钟关闭灯光,运行放映,然后在15秒钟后重新打开灯光。现在,当作业运行时,它仅播放节目,并且继电器从不触发以保持开灯或关灯。我有3个脚本。一是表演,二是打开和关闭灯。我真的很困惑。

运行节目

/home/pi/lightshowpi/./lightsoff.sh
sleep 15
$SYNCHRONIZED_LIGHTS_HOME/bin/start_playlist_once $SYNCHRONIZED_LIGHTS_HOME/mus$
sleep 15
/home/pi/lightshowpi/./lightson.sh

点亮

#!/bin/bash
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi
python py/hardware_controller.py --config=overmech.cfg --state=on

熄灭

#!/bin/bash    
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi   
python py/hardware_controller.py --config=overmech.cfg --state=off

所有这些都是带有.sh的{​​{1}}个文件。谢谢

2 个答案:

答案 0 :(得分:0)

我不知道运行cronjobs的PATH是什么,但是可能是找不到python可执行文件。尝试输入完整路径:

#!/bin/bash
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi
/usr/bin/python py/hardware_controller.py --config=overmech.cfg --state=on

当然,假设python在/ usr / bin中。

我也将输入py/hardware_controller.py的绝对路径,但我不知道您将其放在何处:)

答案 1 :(得分:0)

通过更改这些设置,您的crontab应该可以工作。

首先,像提到的其他所有人一样,请确保您的Shell脚本在系统中具有此功能或与之等效的功能。您还可以通过在crontab中使用类似于以下内容的方法来重定向crontab中的sdout和stderrr:

*/15 * * * * /bin/bash /home/pi/lightshowpi/lightson.sh  2&>1 >> lights_on_log.txt

通过使用2&> 1,您将为运行cron作业的用户将stdout和stderr附加到主目录中的该文件,这样您就可以查看输出和错误并准确地找出问题所在。 / p>

最有可能导致此问题的原因是您没有使用python二进制文件的完整路径,即     / usr / bin / python 不仅仅是

python

您可能还应该研究的另一件事是,两个脚本的命令行参数都使用相对路径,并且取决于cron作业正在运行的用户,这可能会引起问题。要么更改为py目录和overmech.cfg文件所在的目录,要么确保对这些目录也使用完全限定的路径。

我要指出的最后一点(我将其保存下来,因为它的含义并不多)是您的示例之一显示

/home/pi/lightshowpi/./lightsoff.sh

是多余的,不需要。自。开始,点斜杠用作缩写当前目录中文件的标准路径的一种方式。扩展到当前工作目录,/帮助构建路径的最后一位。在上面的示例中,如果没有,您会做的很好。并使用如下完整路径:

    /home/pi/lightshowpi/lightsoff.sh
相关问题