比如我要先判断 stdout 里是否匹配某模式, 匹配则对 stdout 做进一步处理.
无脑一点, 我们可以把 stdout 写到临时文件里:
tmpfile=$(mktemp)
cmd | tee $tmpfile | inspect $pattern && process $tmpfile
rm -f $tmpfile
| . |
工程上的问题就是复杂多变, 今天我死活都运行不了 calicoctl, 硬着头皮还是找到了问题, 重新总结 calico sdn 的思路.
症状: host1 不能 ping host2 上的容器 c1
ip r
show route for [c1 ip] 看结果;host1 / host2 / c1 namespace 三处同时抓包, 最明显的临床症状是 host1 + host2 能抓包但是 c1 network namespace 里抓不到, 那就实锤.发现 docker cp 的实现跟屎一样.
一开始发现的问题是 docker-ce/components/client 里的 CopyToContainer 这个 interface, 签名是这样的:
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error
我注意到的问题是里面 path 必须是 dirname, 比如说你想 docker cp ./a.txt $CONTAINER_ID:/etc/b.txt, 那么 path 必须是 /etc, 否则直接报错.
.
| # init | |
| systemctl stop iptables | |
| apt update -y | |
| # etcd | |
| curl -OL https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz | |
| tar xf etcd-v3.3.10-linux-amd64.tar.gz | |
| cp -f /root/etcd-v3.3.10-linux-amd64/{etcd,etcdctl} /usr/bin/ |
| package main | |
| import ( | |
| "bufio" | |
| "flag" | |
| "fmt" | |
| "log" | |
| "net/http" | |
| _ "net/http/pprof" | |
| "os" |
| import os | |
| import sys | |
| def main(): | |
| line = 'x' * (int(sys.argv[1]) - 1) + '\n' | |
| buf_mode = {'--nbf': 0, '--lbf': 1, '--fbf': 2}[sys.argv[2]] | |
| for _ in range(10): | |
| pid = os.fork() |