我正在使用从我的一个供应商处收到的 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
。这会因为锁定文件的存在而暂停作业,并且随着时间的推移会创建巨大的队列。您可以做什么:
- 使
cron
作业以大于作业执行时间的间隔运行。 - 按照其他答案的建议,添加超时,以便作业在一段时间后过期。这实际上与第 1 点非常相似,因为在特定时间间隔内,您将只执行一个作业。
- 使每次运行都独一无二,并将输出存储在不同的文件中。或者只存储“负面”结果并假设其余结果正常(代码 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.lockfile
让flock
函数,然后它将curl
在网址上运行。
让 Cron 使用flock
(-timeout 240
不是-n
)
让其每 10 分钟执行一次。
当系统管理员解决配置问题后,您应该检查以验证flock
参数。
这些都是暂时的:当配置问题最终得到解决时,系统管理员应该调查这些问题。