我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔在本文中,给大家带来的是,piwik批量任务的docker版本设置过程。为啥docker版本要特别的说明呢?因为docker下面默认没有crontab,就是说,我们想当然的在piwik的docker镜像里面,设置crontab是不可能完成的任务。不用吐槽,docker的镜像里面连vi都没有,所以,根本不必吐槽没有crontab。

苏南大叔:docker版piwik,如何执行定时任务? - docker-piwik-crontab
docker版piwik,如何执行定时任务?(图8-1)

解决方案

本篇文章可能正确答案很多,大家根据自己的情况来选择不同的答案。我的宿主机是个mac,所以,对于我来说,标准答案可能是如下这样的。

首先,利用docker的共享目录,先建立好了一个sh文件。内容如下:

/usr/local/bin/php /var/www/html/console core:archive --url=http://localhost:10001/ >> /var/www/html/crontab/piwik-archive.log

上面涉及到的路径信息,都是基于docker的some-piwik这个镜像的。

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab
docker版piwik,如何执行定时任务?(图8-2)

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_2
docker版piwik,如何执行定时任务?(图8-3)

然后利用宿主机(mac)来执行docker(some-piwik)里面的这个sh脚本。这个过程中,主体身份切换蛮频繁的。大家要仔细想好。

*/1 * * * * /Applications/Docker.app/Contents/Resources/bin/docker exec some-piwik /bin/bash /var/www/html/crontab/crontab.sh >/www/docker/piwik_cron.log 2>&1

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_4
docker版piwik,如何执行定时任务?(图8-4)

上图中,黄色箭头是镜像里面的路径,橙色是镜像外的路径。是不是非常难?我觉得也是。各种命令组合的非常复杂,而且也没有个括号之类的,体现一下优先级别。

到此为止,答案已经揭晓完毕。

基本原理

下面开始,由苏南大叔给大家,详细说明一下。在docker镜像里面shell脚本,也可以写成这样。

cd /var/www/html && php console core:archive --url=http://localhost:10001 >> /var/www/html/contab/docker_cron.log

这里面,就用了一些,简写的相对路径。

而镜像外宿主机上的shell也可以写成这样。

* * * * * docker exec some-piwik sh /var/www/html/crontab/crontab.sh

看起来明朗很多了吧。但是,可能理想和现实就是有差别的。路径简写,就可能带来意料之外的结果了。命令在shell里面可以直接执行。但是放到crontab里面,就不按套路走了。这是个悲伤的故事。调试的方法就是在crontab的后面带上如下类似脚本:

>/yourpath/log.log 2>&1

这样的话,crontab的输出就会输出到这里,然后就可以看到一些错误输出了。这也就是为什么,苏南大叔的最初的脚本里面,docker命令会使用全路径的原因。当然,你还会看到其他的错误输出,所以,这个crontab级别的log输出,还是挺有用的。

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_5
docker版piwik,如何执行定时任务?(图8-5)

至于docker的位置,是用下面的方法找到的。

find / -name docker

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_7
docker版piwik,如何执行定时任务?(图8-6)

好了,原理基本上叙述完毕。

相关截图

剩下的是中间过程的一些其他截图,大家看看吧。

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_3
docker版piwik,如何执行定时任务?(图8-7)

苏南大叔:docker版piwik,如何执行定时任务? - piwik_crontab_6
docker版piwik,如何执行定时任务?(图8-8)

相关链接

相关文章地址如下:

总结

对于其他的情况来说,解决方案应该大同小异。不过,要掌握好crontab的调试方法。才好具体问题具体分析。您说,对吧。关于piwik的更多相关文章,请点击苏南大叔的其他文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   piwik    crontab