【发布时间】:2021-12-18 21:39:20
【问题描述】:
我有许多任务需要在服务器上不断运行。当它们循环时(因此并不意味着结束),我想并行运行它们而不是顺序运行。
要运行这些脚本之一,我可以例如
php myscript1.php;
为了并行运行它们,我一直在使用屏幕。因此,我专门为脚本创建了一个屏幕,在该屏幕中运行它,然后分离创建一个新的并在该屏幕中运行下一个。
screen -S script1
php myscript1.php;
ctrl-a d
重复
这很好,例如5. 但是如果我重新启动服务器,或者想要更改脚本的运行方式,它会变得非常烦人 - 并且正在运行的这些小型循环任务的数量越来越多。
我知道在终端的任何时候我都在努力工作,因为我什么都不知道,所以我该如何运行
php myscript1.php; php myscript2.php; php myscript3.php;
所以它们同时运行,并且无声(无输出)?
编辑: 值得注意的是(感谢@bossman 下面的评论澄清)这些任务的长度是可变的和弹性的,我不希望同一任务的重叠实例运行,但我希望它们连续运行。
这意味着每 10 分钟执行一次固定的 cron 作业并不理想,因为有些可能需要例如15 分钟完成,或 2 分钟。因此,我希望在循环之间使用具有固定睡眠的循环。
【问题讨论】:
-
不要在脚本中使用循环,而是为每个脚本创建一个 cron 作业(使用 crontab),并让该 cron 每 x 秒或分钟触发一次。
-
我确实想知道这一点 - 但假设它比我希望它每 10 分钟运行一次,那么仅构建一个循环并在其中睡眠 10 分钟有缺点吗?
-
好吧,如果你有一个通过 crontab 运行的脚本,那么重启服务器也没关系。系统将再次启动您的 crons,您也不必依赖始终打开的终端窗口,因为它作为系统进程在后台运行。 cron 应该只运行一个脚本/进程,做它需要做的事情并关闭,然后重复(在你的情况下每 10 分钟)。
-
每个脚本都可以有自己的cron,想加多少就加多少..