当前位置: 首页 > 面试题库 >

在任何给定时间运行5个脚本

习哲彦
2023-03-14
问题内容

我有一个bash脚本(在CentOS 6.4下运行),可以启动90个 不同的 PHP脚本。

#!/bin/bash

php path1/some_job_1.php&
php path2/some_job_2.php&
php path3/some_job_3.php&
php path4/some_job_4.php&
php path5/some_job_5.php

php path6/some_job_6.php&
php path7/some_job_7.php&
php path8/some_job_8.php&
php path9/some_job_9.php&
php path10/some_job_10.php
...

exit 0

为了避免服务器超载,我使用&符号&,它可以工作,但是 我的目标是始终同时运行5个脚本

有没有办法做到这一点?


问题答案:

这个问题弹出了几次,但我找不到合适的答案。我想现在我找到了一个很好的解决方案

不幸的parallel是,这不是标准发行版的一部分,但make是。它有一个开关-j可做并联。

man make(1) ]
:(有关make的并行执行的更多信息)

       -j [jobs], --jobs[=jobs]
            Specifies the number of jobs (commands) to run simultaneously.
 If
             there  is  more than one -j option, the last one is effective.
 If
             the -j option is given without an argument, make  will  not
 limit
             the number of jobs that can run simultaneously.

因此,Makefile只要适当地解决这个问题即可。

    .PHONY: all $(PHP_DEST)

    # Create an array of targets in the form of PHP1 PHP2 ... PHP90
    PHP_DEST := $(addprefix PHP, $(shell seq 1 1 90))

    # Default target
    all: $(PHP_DEST)

    # Run the proper script for each target
    $(PHP_DEST):
            N=$(subst PHP,,$@); php path$N/some_job_$N.php

PHP#每个呼叫创建90个目标php path#/some_job_#.php。如果运行make -j5,它将运行5个php并行实例。如果一个完成,则开始下一个。

我将重命名Makefileparallel.mak,然后运行chmod 700 parallel.mak并添加#!/usr/bin/make-f到第一行。现在可以称为./parallel.mak -j 5

甚至您可以使用更复杂的-l开关:

       -l [load], --load-average[=load]
             Specifies  that  no new jobs (commands) should be started if
 there
             are others jobs running and the load average is at least  load
 (a
             floating-point number).  With no argument, removes a previous
 load
             limit.

在这种情况下,make将根据系统的负载来决定可以启动多少个作业。

我用它测试./parallel.mak -j-l1.0并运行良好。相反,它首先并行启动了4个程序,-j而没有args意味着要尽可能多地并行运行进程。



 类似资料:
  • 问题内容: 我想编写一个简单的python脚本来完成特定的工作。我花了一些时间从网站链接信息。 在正确的时间单击这些链接的最佳方法是什么?我是否需要计算当前电流与列表中的电流之间的时间间隔并睡眠一会儿? 我真的停留在这一点上,并欢迎任何可能有用的想法。 问题答案: 看一下Python的sched模块。

  • 问题内容: 我有一个 包含特定日期和时间 的 文本文件。 我希望能够 在该文件中指定的时间运行脚本。 您将如何实现?创建另一个在后台运行的脚本(有点像守护进程),并每秒检查当前时间是否与文件中的时间匹配?还有另一种方法吗?该机是 linux服务器,Debian wheezy。提前致谢 问题答案: 请看以下内容: 该代码行在特定时间执行“ ls -l”。这是在特定时间执行某些操作(在我的示例中为命令

  • rank ▲ ✰ vote url 60 383 111 805 url 如何测量脚本运行时间? 我在Project Euler发现好多这样的问题,许多其他地方也问怎么测量执行时间.但是有的时候答案有点kludgey-比如,在__main__中加入时间代码,所以我想在这里分享一下解决方案. Python自带了一个叫cProfile的分析器.它不仅实现了计算整个时间,而且单独计算每个函数运行时间,并

  • 问题内容: 我今天才开始学习Python。我一直在阅读Byte Python。现在,我有一个涉及时间的Python项目。我在Byte of Python中找不到任何与时间有关的东西,所以我问你: 如何在用户指定的时间内运行块然后中断? 例如(用一些伪代码): 甚至更好: 问题答案: 我建议生成另一个线程,使其成为守护程序线程,然后休眠直到您希望任务终止。例如: 当所有非守护程序线程都退出时,Pyt

  • 问题内容: 跟踪任务在gradle构建脚本中花费了多长时间的最优雅的方法是什么?在最佳情况下,将时间直接记录在任务名称的同一行或下一行 问题答案: 最干净的解决方案是实现TaskExecutionListener(我确定您可以处理该部分)并向进行注册。

  • 我想在Jenkins运行一个脚本10小时。这可能吗?我的脚本长度大约是55分钟。我现在已经安排它每小时运行一次。所以它保持每小时运行一次。(永不停止!!) 但是有没有办法让它在指定的时间内运行,比如说10个小时,然后自动停止?我希望它指定这个55分钟的脚本应该连续运行多长时间,然后自动停止,而不是安排。 所以,如果我在上午8点开始构建,并说运行3小时,它应该一直运行到上午11点,然后停止。