请稍侯

openat()函数避免TOCTTOU

openat()函数 openat函数是POSIX.1最新版本中新增的一类函数之一,希望解决两个问题。 第一,让线程可以使用相对路径名打开目录中的文件,而不再只能打开当前工作目录。 第二,可以避免time-of-check-to-time-of-use(TOCTTOU)错误。 TOCTTOU错误的基本思想是: 如果有两个基于文件的函数调用,其中第二个调用依赖于第一个调用结果,那么程序是脆弱的。如果两个调用并不是原子操作,在两个函数调用之间文件可能改变了,这样也就造成了第一个调用的结果就不再有效,使得程序最终的结果是错误的。文件系统命名空间中的TOCTTOU错误通常处理的就是那些...

read more

Redis主备数据库同步错误

问题描述 在两台redis上同步数据数据出现如下错误 [18245] 21 Nov 18:01:44 # Can't handle RDB format version 2 [18245] 21 Nov 18:01:44 # Failed trying to load the MASTER synchronization DB from disk 原因 redis的备机版本小于主机redis版本,升级版本即可 参考链接: https://github.com/antirez/redis/issues/203 Ask: Redis 2.4.3 Master Redis 2...

read more

Go语言for循环中的词法陷阱

考虑这个样一个问题:你被要求首先创建一些目录,再将目录删除。在下面的例子中我们用函数值来完成删除操作。下面的示例代码需要引入os包。为了使代码简单,我们忽略了所有的异常处理。 var rmdirs []func() for _, d := range tempDirs() { dir := d // NOTE: necessary! os.MkdirAll(dir, 0755) // creates parent directories too rmdirs = append(rmdirs, func() { os.RemoveAll(dir) ...

read more

使用Harbor+Ceph在单机搭建docker镜像管理

1.背景 因为公司需要, 要前台使用Harbor作为docker镜像管理系统,后台使用Ceph作为存储 Harbor地址: https://github.com/vmware/harbor Ceph地址:http://docs.ceph.com/docs/jewel/ 因为是测试,所以全部在单机下安装. 2. 环境准备 因为Ceph官网主要针对多机环境进行的安装,单机环境需要进行一些调整 环境准备: Centos 7服务器一台 3. 安装Harbor Harbor的安装比较简单,安装地址(https://github.com/vmware/harbor/blob/mast...

read more

Python中subprocess获取stdout和stderr

说明 Python中执行shell脚本可以通过commands模块中的commands.getstatusoutput来获取执行脚本的输出,返回的状态码,但是这个模块已经不推荐使用了,官网上执行脚本给出的解决方案是使用subprocess模块 使用subprocess 方案一 用subprocess的时候,获取stdout和stderr: import subprocess p = subprocess.Popen(['tail','-10','/tmp/hosts.txt'], stdin=subprocess.PIPE, ...

read more

Python多进程执行统一任务队列

说明 现在有这样一个需求,我想开启多个线程去执行一个队列,当当队列没有元素的时候,所有进程阻塞,放入元素到队列中,唤醒一个线程进行执行 代码 # !/usr/bin/env python # -*- coding:utf-8 -*- from multiprocessing import Queue, Process import time class WorkManager(object): def __init__(self, work_num=1000, thread_num=2): self.work_queue = Queue() ...

read more

重新设置docker镜像的存储位置

1.背景介绍 Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把docker的数据挂载到数据盘, 例如:/dev/vdb目录下。 [root@10-10-63-106 docker]# df -lhT Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 xfs 20G 3.8G 16G 20% / devtmpfs ...

read more

双向进程间通信管道

问题和常见方法 Linux 提供了 popen 和 pclose 函数,用于创建和关闭管道与另外一个进程进行通信。其接口如下: FILE *popen(const char *command, const char *mode); int pclose(FILE *stream); 遗憾的是,popen 创建的管道只能是单向的 – mode 只能是 “r” 或 “w” 而不能是某种组合–用户只能选择要么往里写,要么从中读,而不能同时在一个管道中进行读写。实际应用中,经常会有同时进行读写的要求,比如,我们可能希望把文本数据送往sort工具排序后再取回结果。此时popen就无法用上了...

read more

INADDR_ANY的用法

INADDR_ANY的用法 网络程序服务器端socket结构,端口使用INADDR_ANY struct sockaddr_in name; name.sin_addr.s_addr = htonl(INADDR_ANY); linux下的socket INADDR_ANY表示的是一个服务器上所有的网卡(服务器可能不止一个网卡) 多个本地ip地址都进行绑定端口号,进行侦听。不光是多个网卡的问题. 见如下server listen: 80 0.0.0.0 //INADDR_ANY,外部的client ask 从哪个server的地址近来都可以连接...

read more