Jav*_*bra 4 process cron monitoring
我想知道是否有人可以指出我正确的方向。我几乎没有使用 Linux 命令行的经验,最近由于工作中的各种因素,我需要获得知识。
基本上我有两个php
脚本驻留在我的服务器上的一个目录中。为了应用程序的目的,这些脚本必须连续运行。目前我是这样实现的:
nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &
Run Code Online (Sandbox Code Playgroud)
和
nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &
Run Code Online (Sandbox Code Playgroud)
但是,我注意到尽管存在无限循环,脚本还是会定期停止,我不得不重新启动它们。我不知道为什么,但他们知道。这让我看到了一项CRON
工作的前景,该工作检查它们是否正在运行,如果没有,则运行它们/重新启动它们。
任何人都可以向我提供一些有关如何解决此问题的信息吗?
我想扩展 Davidann 的回答,因为您不熟悉 cron 工作的概念。每个 UNIX 或 Linux 系统都有一个存储在某处的 crontab。crontab 是一个纯文本文件。考虑以下内容:(来自Cron 上的Gentoo Wiki)
#Mins Hours Days Months Day of the week
10 3 1 1 * /bin/echo "I don't really like cron"
30 16 * 1,2 * /bin/echo "I like cron a little"
* * * 1-12/2 * /bin/echo "I really like cron"
Run Code Online (Sandbox Code Playgroud)
这个 crontab 应该每隔一个月的每一天的每一小时的每一分钟回应“我真的很喜欢 cron”。显然,只有当您真的喜欢 cron 时才会这样做。crontab 还会在 1 月和 2 月的每天 16:30 回声“我有点喜欢 cron”。它还会在 1 月 1 日的 3:10 回应“我真的不喜欢 cron”。
作为 cron 的新手,您可能希望对带星号的列进行注释,以便了解每一列的用途。我所知道的每一个 Cron 实现都是这个顺序。现在将 Davidann 的回答与我的评论文件合并:
#Mins Hours Days Months Day of week
* * * * * lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock
Run Code Online (Sandbox Code Playgroud)
在每列中不设置任何值默认为:
每个月的每一天的每一小时的每一分钟整周,--> 整年的每一分钟。
正如 Davidann 所说,使用锁文件确保只有一个 php 解释器副本运行,php parse_tweets.php
是“运行”文件的命令,该行的最后一位将删除锁文件以准备下一次运行。我不喜欢每分钟删除一个文件,但如果这是您需要的行为,这是非常可以接受的。写入和重写到磁盘只是个人喜好