owncloud中的后台任务

      在某些时刻,一些事情我们不需要直接给予用户响应,为了提高性能, 我们会将这类事务处理放到一个后台任务中。

在owncloud中你只需要事项IJob接口或者QueueJob接口,然后通过

\OC::$server->getJobList()->add

添加即可。

        那怎样让这些Job得以执行呢, 我们需要通过Linux的crontab来进行任务调配,我们知道crontab可以指定任务的运行周期,所以owncloud目前也就没有实现自己的任务调度机制,而是每次被crontab触发的时候就会执行任务。

下边以ubuntu为例说明添加入crontab的过程:

sudo crontab -u http -e

通过该命令会让你选择一个文本编辑工具,选择自己熟悉的即可,然后将下边内容输入:

*/15  *  *  *  * php -f /srv/http/owncloud/cron.php

该句内容表示每15分钟运行一次cron.php (实际上cron.php内部会查询已经注册的所有job并运行)

在有些时候我们需要查询crontab的运行日志,而默认情况下ubuntu日志是关闭的,我们需要开启它:

sudo vim /etc/rsyslog.d/50-default.conf

然后将cron.*前的注释符号删除,保存

sudo  service rsyslog  restart

重启之后,即可在  /var/log/cron.log 中看到日志

Posted in owncloud. Tagged with .

Docker 中Hash Sum mismatch问题的解决方案

由于赵国特殊的网络原因,网络偶尔抽风就会导致我们在做apt-update时候出现Hash Sum mismatch的问题,进一步分析来看,

我们所使用的网络供应商,有些会设置一些透明缓存,以增加网络内部速度,减少出口的流量,你获取的某些文件不是源服务器上的真正文件,是从缓存中获取的,当缓存中获取的一些校验信息跟源中不一致的时候,自然提示校验失败,无法继续更新。
此问题实际上跟apt软件仓库的格式设计有关。新发布的版本的软件仓库更新比较频繁,按道理缓存中的文件应该同步更新,可惜因为多个镜像站点的有快慢,因此造成了缓存无法保证一致性。
当网络提供商足够有实力,不设至透明缓存时,这个问题是不存在的。这就是为什么有些人反馈使用无线上网卡(移动、联通的3g网络)就一切OK,一单换回长城宽带、或者宽带通就不行了。
以上就是问题出现的真正原因。
我的家中网络是宽带通,毫无疑问这种网络ISP肯定会设置透明缓存。
解决方案很简单,绕过缓存直接访问站点即可。

值得称赞的是国内好几家良心企业提供了更新源,其中速度最好的应该是阿里提供的http://mirrors.aliyun.com/

以debian为例, 访问http://mirrors.aliyun.com/help/debian 可以看到修改方法。

具体到Docker中, 我们需要修改Docker file,添加如下代码:

RUN echo 'deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib\n\
deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib'  > /etc/apt/sources.list

另外,如果你是在阿里云服务器中,可以将域名替换为mirrors.aliyuncs.com,这样可以免公网流量。

Posted in Uncategorized.

Jodconverter 转换中文出现乱码

 

最近有个项目需要做文档的在线转换, 经过比较最终选择了Jodconverter, 并且使用了docker发布的方式将使用了一个jodconverter的docker image, 转换英文一切都好, 唯独在转换中文时候发现有些中文显示为方框框。

经一番google,发现是字体的原因,解决方法也很简单, 直接将你机器上的所有中文字体copy到libreoffice字体文件夹即可,我使用的这个镜像中的目录是:/usr/lib/libreoffice/share/fonts/truetype/

字体copy进入container之后需要重启container。

Posted in Linux/Unix.

Docker应用的可视化监控管理

本文介绍一个开源项目Weave Scope,项目地址是https://github.com/weaveworks/scope。Weave Scope这个项目会自动生成容器之间的关系图,方便理解容器之间的关系,也方便监控容器化和微服务化的应用。
首先,我们在一台机器上面安装Docker,然后安装Weave Scope项目。

sudo wget -O /usr/local/bin/scope https://git.io/scope
sudo chmod a+x /usr/local/bin/scope
sudo scope launch

上面的脚本会从Docker Hub上面下载最新的Scope镜像,然后我们在Web浏览器中输入http://ip:4040,我们就会看到下面所示页面。

visualization01-1024x549.png

在页面中可以按照进程视图、容器视图和主机视图进行呈现,并且可以进行查询。

如果选择的是容器视图,那么在左下角可以根据容器属性进行过滤,可以只显示系统容器,或者只显示应用容器,或者同时显示系统容器和应用容器,在左下角还可以根据容器状态进行过滤,可以只显示停止状态的容器,或者只显示运行状态的容器,或者同时显示停止状态和运行状态的容器。

下图是在容器视图中展现停止状态的应用容器:

visualization02-1024x723.png

在容器视图可以按照DNS名称和镜像进行归类展现,下图是对上图中停止状态的应用容器按照镜像进行归类展现:

visualization03-1024x828.png

下图是在容器视图上展现运行状态的应用容器,可以看到机器38dad64f上面存在两个运行状态的应用容器,分别是wordpress-db和wordpress-app,这两个容器的作用会在下面详细介绍:

visualization04.png

可以在左下角选择监控CPU使用率或者内存使用率:

visualization05.png

下图是选择监控CPU使用率后的界面,选择wordpress-db容器后,会显示CPU使用率:

visualization06.png

下图是选择监控内存使用率后的界面,选择wordpress-db容器后,会显示内存使用率:

visualization07.png

当用鼠标左键点击wordpress-db容器后,会显示这个容器的详细信息,如下图所示:

visualization08-600x1024.png

在容器详细信息页面,可以点击“docker.io/mysql”查看镜像详细信息:

visualization09.png

也可以点击“38dad64f”查看主机详细信息:

visualization10-409x1024.png

当在主界面中选择主机视图,那么可以对主机进行图形展现,如下图所示:

visualization11.png

在主机视图中,可以在左下角选择按CPU使用率、负载、内存使用率进行监控:

visualization12-300x61.png

在主机视图中,也可以用鼠标左键点击主机“38dad64f”,显示主机“38dad64f”的详细信息。

在进程视图中,可以展现主机上scope进程的信息:

visualization13.png

在进程视图中,可以在左下角选择按CPU使用率、内存使用率、打开文件数进行监控:

visualization14-300x52.png

如果选择按照打开文件数进行监控,那么如下图所示,可以看到scope-probe进程打开了17个文件,scope-app进程打开了9个文件:

visualization15.png

用鼠标左键点击scope-probe进程,可以看到这个进程的详细信息,如下图所示:

visualization16.png

在主界面右下角,可以对Scope监控进行简单的设置:

  1. 可以暂停监控布局变化,暂停后页面就不会实时进行变化,这样页面中的图形元素就可以保持不变;
  2. 可以强制重绘监控布局,这样就可以不用等下一个重绘时间点;
  3. 可以将监控内容保存成SVG格式文件;
  4. 可以将监控数据保存成JSON格式文件;
  5. 可以将展现图形切换成高对比样式,如下图所示:

    visualization17.png

Weave Scope这个项目还会自动呈现容器之间的关系,方便监控容器化和微服务化的应用。在上面的例子中,可以看到机器38dad64f上面存在两个运行状态的应用容器,分别是wordpress-db和wordpress-app,其中wordpress-db是一个mysql应用容器,wordpress-app是一个WordPress应用容器,服务端口是10080,WordPress应用容器需要使用MySQL应用容器,现在已经安装好了wordpress-app容器,但是对wordpress还没有进行安装配置,现在容器视图中界面如下:

visualization18-1024x598.png

当在浏览器中输入http://ip:10080,并对WordPress进行安装配置时,容器视图中界面如下,可以看到Scope监控到有outbound连接请求,促使wordpress-app进行inbound连接:

visualization19-1024x857.png

在安装配置好WordPress后,进入WordPress登录界面,这时候在Scope的进程视图中可以看到多了一个Apache进程,这个进程就是提供WordPress的Web服务:

visualization20-1024x476.png

我们登录到WordPress中,对WordPress进行升级,WordPress升级界面如下:

visualization21-1024x605.png

此时我们在Scope容器视图中查看,可以看到wordpress-app同wordpress-db两个容器之间有通讯,这是因为WordPress升级过程中需要操作MySQL数据库,也就是说需要同wordpress-db进行通讯。

visualization22-1024x812.png

上面介绍的是在主机上安装Scope的例子,Scope还可以安装在Kubernetes上,还可以安装在Amazon ECS上,还可以安装在DC/OS上。

综上所述,一旦我们将应用容器化之后,传统的应用监控可能不起作用了,需要我们采用新的方式来监控应用、监控进程、监控容器,通过Weave Scope这个项目,可以方便的监控容器之间的关系,也方便监控容器化和微服务化的应用,帮助我们了解应用和容器的运行状况。

原文链接:Docker应用的可视化监控管理,作者:马俊,天云软件产品总监。

Posted in Docker.

进入container

如果想进入container内部一探究竟, 那么你需要下边几个命令:

1. 提前安装好nsenter

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

2. 获取pid

docker inspect -f  '{{ .State.Pid }}'  $containerId

3. 进入

sudo nsenter --target $pid --mount --uts --ipc --net --pid

 

给出一个实例:

 

image

Posted in Uncategorized. Tagged with , .