首页 > 解决方案 > crontab 没有运行第二个命令

问题描述

我在 crontab 中有以下两行。我希望第一行在启动后 30 秒启动我的 python 脚本,第二行每两分钟杀死并重新启动脚本。

@reboot (/bin/sleep 30; /usr/bin/python3 -u /home/pi/Desktop/file.py > /home/pi/Desktop/logfile 2>&1)

*/2 * * * * (kill $(pgrep -f 'python3 -u /home/pi/Desktop/file.py'); /usr/bin/python3 -u /home/pi/Desktop/file.py > /home/pi/Desktop/logfile 2>&1)

该脚本在启动时确实运行正确,并且该脚本在两分钟后被终止,但第二行没有重新启动该脚本。我不相信这是一个语法错误,因为如果我将第二行直接复制到终端中(没有 */2 * * * *),它会正确地终止并重新启动脚本。为什么这条线在终端中有效,但在 crontab 中无效?

提前致谢

标签: python-3.xcronraspberry-pi

解决方案


我不知道为什么,但似乎 crontab 在 'kill $()' 命令之后不会在同一行中执行任何其他命令。我通过在 kill 命令之后将 printf 命令放置到日志文件中发现了这一点,但只有在 kill 命令之前的那个才最终出现在日志中。我删除了 kill 命令,但将 pgrep 留在了它的位置,这导致日志中的第一个 printf 文本、PID 号和第二个 printf 文本。我的工作只是将这两个命令放在一个 shell 文件中,并让 crontab 运行 shell。似乎工作得很好。


推荐阅读