也许我对 Supervisor 的误解,但也许我问这个问题会帮助澄清这一点。基本上,我的 /etc/supervisord.conf 文件中有一个 Supervisor 程序,它执行一个 bash 脚本,该脚本仅执行一个 PHP 脚本。我能够成功地让该 bash 脚本仅在启动 Supervisor 时从 Supervisor 运行。但是,像 Supervisor 这样的东西的意义不就是它在后台按设定的时间间隔运行这些任务,这样我就可以知道它一直在运行并根据它运行的脚本处理它可能需要的任何任务吗?
这是我的配置文件中的程序:
[program:program_name_d]
command=/path/to/runme
process_name=%(program_name)s
numprocs=1
autostart=true
答案1
在我看来,你真正寻找的更接近于 cron。我不熟悉主管,但从提供的描述来看这里听起来它试图成为 init 某些方面的用户空间替代品。我的意思是它专注于提供:
- 启动/停止/重启服务(程序)
- 自动程序崩溃检测和重启
- 控制启动时各种程序的启动顺序。
- 将服务管理委托给与其一起工作的人员(即将 Web 服务器重启权限授予 Web 开发人员)。
答案2
您计划做的事情实际上是可行的,但是您必须修改中间 bash 脚本才能实际执行重复过程的间隔运行。
在我的公司,我们使用 python 脚本来执行完全相同的任务,即重复运行 php 脚本。那么你通常需要做什么:
- 创建一个以要执行的文件和间隔作为参数的脚本。
- 创建一个 While 循环或更好的循环,创建某种可运行的任务,该任务会连续执行,并具有关闭处理功能,以防任务意外终止。让任务执行目标程序并等待间隔。请记住,在等待之前要等到目标完成执行。
- 在 Supervisor 中,将中间脚本设置为目标并提供参数。如果您创建了 goog 实现,则应该能够将该脚本用于可以以相同方式执行的多个脚本。
- 更新你的主管配置并启动该进程。
Tada:你有一个类似 cronjob 的进程,由主管运行和监控。
当然,您也可以扩展脚本,使其能够处理日期、工作日或特定时间跨度内的时间跨度。例如,您的脚本仅在周日凌晨 1 点左右执行。