Crontab不会运行脚本

2024-06-07 03:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的树莓皮上有一个灯光秀。我还运行crontab来实现自动化。当我在终端运行脚本时,它的行为正常,工作完美无瑕。当cron运行时,它不能正常工作。我把它设置成在节目开始前15秒关灯,然后运行节目,15秒后再把灯打开。现在,当作业运行时,它只播放节目,继电器从不触发,以保持灯的开或关。我有三个剧本。一个是表演,两个是开灯和关灯。我真的很困惑。你知道吗

主持演出

/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

所有这些都是带有chmod +x.sh文件。谢谢


Tags: pybashhomebinshpiexportsleep
2条回答

不管它是罪魁祸首,有几件事你都应该解决,通过改变这些,你的crontab应该可以工作。你知道吗

首先也是最重要的一点是,像前面提到的其他人一样,确保shell脚本在您的系统中有这个或它的等价物。您还可以在crontab中重定向sdout和stderrr,方法是在crontab中使用类似的方法:

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

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

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

python

另外一件事您可能应该研究的是,两个脚本的命令行参数都使用相对路径,这取决于cron作业运行的用户,因为这可能会带来问题。或者切换到py目录中的任何目录overmech.cfg公司文件位于中,或者确保也为这些文件使用完全限定的路径。你知道吗

最后一点我要指出的是(我把它留到最后,因为它实际上意义不大)你的一个例子显示

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

是多余的,不需要。点斜杠用于缩写当前目录中文件的完全限定路径。扩展到当前工作目录和/或帮助构造路径的最后一位。在上面的例子中,如果不使用。用这样的完整路径:

    /home/pi/lightshowpi/lightsoff.sh

我不知道cronjobs的运行路径,但可能是找不到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的绝对路径,但我不知道放在哪里:)

相关问题 更多 >