【问题标题】:How do I end a looping script in crontab?如何在 crontab 中结束循环脚本?
【发布时间】:2021-04-14 08:45:28
【问题描述】:

我正在编写一个通过永无止境循环运行的脚本。使用 cron 我在重新启动时启动脚本。但是,我需要每 24 小时从 github 更新此脚本。我正在运行一个基本上遵循以下内容的 shell 脚本:

  1. 将 cron 备份到 .txt 文件
  2. 使用 crontab -r 清空 cron
  3. 从 GitHub 拉取更新
  4. 加载 cron 备份并重新启动 cron。

shell 脚本清空 cron,更新代码,然后使用相同的文件名再次启动 cron,然后 cron 再次运行程序。每次脚本完成一个循环时,我都会通过向文本文件输出一条消息来测试这一点。当我在 GitHub 中更改消息输出时,cron 会拉取更新,我可以看到更新后的消息。问题是,它也继续显示旧消息。例如:

原消息“测试”:测试测试测试测试测试 更新消息“更新”:测试更新测试更新测试更新

即使我清除了 cron,更新了代码,然后再次启动它,它仍会继续输出旧消息。在我看来,简单地清空 cron 并不能阻止前一个循环继续运行。

我研究过使用“killall”来阻止所有 sh 脚本运行,但为了清除我创建的许多循环脚本,我使用 killall5 -9 杀死了每个正在运行的进程。现在当我输入 ps 查看正在运行的进程时,没有列出。

我很困。任何和所有的帮助将不胜感激!

【问题讨论】:

  • 另外,您的“清空”和恢复 crontab,似乎您不了解典型的工作流程。你读过crontab-info 吗?也许你应该让你的项目在一台机器上运行,一次运行一个脚本,直到你能更好地控制事情。祝你好运。

标签: linux github cron raspberry-pi


【解决方案1】:

使用 sudo pkill python 结束所有正在运行的 python 脚本。

【讨论】:

  • 很高兴这对你有用,但假设最终这会杀死你不想被杀死的脚本。存在更好的解决方案。他们都有取舍。我想我会将“当前 PID”值保存到“众所周知的”tmp 文件中,并在您想要循环之前有一个额外的 crontab 条目运行 X(3?)分钟。该脚本所要做的就是读取众所周知的 PID 文件值,然后只杀死该进程树。然后主脚本就可以启动了。也可以只让主脚本完成所有这些工作。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2015-12-21
  • 2014-03-18
  • 2010-12-03
相关资源
最近更新 更多