我在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中却无效?
预先感谢
答案 0 :(得分:0)
我不确定为什么,但是crontab似乎不会在'kill $()'命令之后的同一行中执行任何其他命令。 我是通过将printf命令放置在kill命令之后的日志文件之前的日志文件中发现的,但是只有kill之前的命令才出现在日志中。我删除了kill命令,但将pgrep留在了它的位置,这导致日志中的第一个printf文本,PID号和第二个printf文本。 我的解决方法是将两个命令放入一个shell文件中,并让crontab运行该shell。似乎工作正常。