python-3.x - 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 中无效?
提前致谢
解决方案
我不知道为什么,但似乎 crontab 在 'kill $()' 命令之后不会在同一行中执行任何其他命令。我通过在 kill 命令之后将 printf 命令放置到日志文件中发现了这一点,但只有在 kill 命令之前的那个才最终出现在日志中。我删除了 kill 命令,但将 pgrep 留在了它的位置,这导致日志中的第一个 printf 文本、PID 号和第二个 printf 文本。我的工作只是将这两个命令放在一个 shell 文件中,并让 crontab 运行 shell。似乎工作得很好。
推荐阅读
- java - Java Swing paint() 全屏时两次显示一次
- java - 在此查找唯一路径数算法中我做错了什么?
- javascript - 防止在js中将数字转换为八进制
- c# - 运行 Selenium 浏览器测试时 DOM 中的重复元素
- json - 使用 jq 获取键子集并将输出包装到列表
- javascript - 编辑 Java 脚本以偏离某个键并分配不同的值
- react-native - 在 Xcode 上导入自定义反应原生模块的正确方法是什么?
- c# - C# 使用自定义函数扩展属性
- java - 集合中的性能发现元素
- emscripten - 在模块实例之间共享 WebAssembly.Memory