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

苏南大叔今天给大家带来的是,piwik批量任务的docker版本设置过程。为啥docker版本要特别的说明呢?因为docker下面默认没有crontab,就是说,我们想当然的在piwik的docker镜像里面,设置crontab是不可能完成的任务。不用吐槽,docker的镜像里面连vi都没有,所以,根本不必吐槽没有crontab。相关文章地址如下:http://newsn.net/say/piwik-optimize-crontab.html

本篇文章可能正确答案很多,大家根据自己的情况来选择不同的答案。我的宿主机是个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执行定时任务 - piwik_crontab_2

然后利用宿主机(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镜像里面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的位置,是用下面的方法找到的。

find / -name docker

docker版piwik执行定时任务 - piwik_crontab_7

好了,原理基本上叙述完毕。剩下的是中间过程的一些其他截图,大家看看吧。

docker版piwik执行定时任务 - piwik_crontab_3

docker版piwik执行定时任务 - piwik_crontab_6

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

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。