Cron Job 命令 - 理解

Cron Job 命令 - 理解

我正在使用从我的一个供应商处收到的 cron 作业,以便在我的 Woocommerce 网站中创建/更新产品数据、库存和状态。

我已经安装了他们的插件,所有验证都是绿色的,但我遇到了一个问题:
cron 作业每小时只运行 10 个作业(无论选择什么时间)。

我输入了 *、5 分钟、10、15、20……所有任务都一样。所以,10 个任务,它停止了,1 小时后,又有 10 个任务,它停止了。
问题是队列更大(每小时添加超过 10 个任务),所以我没有及时更新。

我开始说我对 cron 作业完全是新手。

从供应商处收到的命令是:

/usr/bin/flock -n /tmp/wc_process_import_itakeit.ro.lockfile /usr/bin/curl https://itakeit.ro/wcmipconnector/readfiles >> /home/itakeit/public_html/wp-content/uploads/mip-connector/logs/process_import_cron.log  

但是,如果我在浏览器中输入此链接并按回车键:https://itakeit.ro/wcmipconnector/readfiles 我会在日志文件中看到日志自动开始显示活动。10 个作业,然后停止。如果我重复此操作,总是有 10 个作业在运行。所有 10 个作业最多需要 2 分钟才能完成。

问题1:供应商的命令和网页链接的命令有什么区别?

问题 2:当我使用 Web 链接时,我在日志文件中看到活动,这可能是假活动吗?我的意思是不要做我猜想正在做的事情?

问题3:还有其他更好的命令吗?

问题 4:我的服务器设置是否存在问题,导致 cron 作业仅运行 10 个作业而不是更多?

问题 5:我的服务器设置是否存在问题,导致 cron 作业每小时只运行一次以遵守时间表:*/5;*/10.....?

PS:我在这个命令中加入了另一个 cron 作业命令:如何创建一个使用网络链接并运行 10 分钟的 cron 作业?

类似这样的方法有时候有效,有时候无效:

wget -q -O – https://itakeit.ro/wcmipconnector/readfiles/ >/dev/null 2>&1  

答案1

问题是由于使用 执行的flock。这会因为锁定文件的存在而暂停作业,并且随着时间的推移会创建巨大的队列。您可以做什么:

  1. 使cron作业以大于作业执行时间的间隔运行。
  2. 按照其他答案的建议,添加超时,以便作业在一段时间后过期。这实际上与第 1 点非常相似,因为在特定时间间隔内,您将只执行一个作业。
  3. 使每次运行都独一无二,并将输出存储在不同的文件中。或者只存储“负面”结果并假设其余结果正常(代码 200)。但在这里您应该处理要合并/清除的许多文件。

为了使作业每小时运行 10 个作业,记录cron需要类似以下内容:

*/6 * * * * /usr/bin/flock -n /tmp/wc_process_import_itakeit.ro.lockfile /usr/bin/curl https://itakeit.ro/wcmipconnector/readfiles >> /home/itakeit/public_html/wp-content/uploads/mip-connector/logs/process_import_cron.log  

答案2

看起来工作流程(而不是 Cron)是这里的问题。

工作流用于/usr/bin/flock尝试锁定/tmp/wc_process_import_itakeit.ro.lockfile然后执行,curl从而触发后台的数据更新过程。

Cron 触发正确,但工作流程却搞乱了一切。正在使用的
命令将尝试获取锁并在其他进程持有锁时退出。flock-n

在不了解工作流程细节的情况下我可以给出的建议是:

必须将命令/usr/bin/flock -n /tmp/w....更改为此命令/usr/bin/flock --timeout 1800 /tmp/w....,这将使flock等待锁定的时间最多为 30 分钟。这将允许所有进程在一小时内执行并为下一个小时做好准备。

这样,所有进程都会获得锁并正确执行!

更新,这是查看各种文件的结果:

看起来:
(1)文件/tmp/wc_process_import_itakeit.ro.lockfile丢失。
(2)文件/home/itakeit/public_html/wp-content/uploads/mip-connector/logs/process_import_cron.log显示超时或配置错误或其他问题。

由此,我们可以确定问题是由于 Workflow 而不是 Cron 造成的。管理员将能够调查并解决此问题。

同时,webbrowser 触发器似乎可以工作。为此,这里有两个临时解决方法:
(解决方法 1)Cron 不能使用flock:它必须直接运行。
使用此命令:

/usr/bin/curl https://itakeit.ro/wcmipconnector/readfiles >> /home/itakeit/public_html/wp-content/uploads/mip-connector/logs/process_import_cron.log

让它每 10 分钟运行一次。
当系统管理员解决配置问题后,您就应该返回到该flock变体。

(解决方法 2)转到/tmp& 执行touch /tmp/wc_process_import_itakeit.ro.lockfileflock函数,然后它将curl在网址上运行。
让 Cron 使用flock-timeout 240不是-n
让其每 10 分钟执行一次。

当系统管理员解决配置问题后,您应该检查以验证flock参数。

这些都是暂时的:当配置问题最终得到解决时,系统管理员应该调查这些问题。

相关内容