Docker内部无权限创建文件夹的问题
今天遇到一个问题,困扰我好久。在docker里面使用go创建文件夹。
err := os.MkdirAll(logDir, 0755)
if err != nil {
glog.Errorf("创建日志文件夹错误:%s", err)
user, err := user.Current()
if err != nil {
log.Fatalf(err.Error())
}
username := user.Username
glog.Infof("当前用户:%s", username)
return
}
总是报错:
非常郁闷,后来查了stackoverflow:
https://stackoverflow.com/questions/...
Gin框架c.clientip()获取的ip很神奇
本来我的需求是在b服务器上面开启了一个服务,是要去c服务器拉取一个文件。 然后b服务器上的服务由a服务器上的curl命令触发。而文件的内容想要记录b服务器的ip。通过查看文件内容来查看是否是b服务器的ip。
本来我是想在c服务器上gin框架通过c.ClientIp()获取b服务器的ip,没想到最终文件里呈现的是a服务器的ip,知道我看了这段注释。
如注释所示:
c.ClientIp()使用了一种尽了最大努力的算法,让获取到的ip穿透代理层,所以最后获取的是a的ip。
Rust 实现下载大文件进度条
rust下载大文件,实现进度条的话,必须要用异步的reqwest才能实现,blocking的reqwest无法使用。
引入依赖
[dependencies]
futures = "0.3.4"
tokio = { version = "1", features = ["full"] }
编写下载函数,实现进度条
install.rs
pub async fn download_package(url: &str) -> Result<String, anyhow::Error> {
let url_last = url.split("/").last().unwrap();
let base_dir = env::current_...
Rust 实现tail F 操作
网上有个例子,但是不支持指定-f参数,也就是最后算多少行开始。我做了下改动,给register函数添加了参数n
use std::fs::File;
use std::io;
use std::io::BufReader;
use std::io::ErrorKind;
use std::io::prelude::*;
use std::io::SeekFrom;
use std::os::unix::fs::MetadataExt;
use std::path::Path;
use std::thread::sleep;
use std::time::Duration;
pub enum LogWatcherAction {
None,
SeekToEnd,
}
...
Rust 实现ssh操作
使用rust操作ssh,执行命令,然后输出。长时间执行的命令需要一行一行输出。核心是通过BufReader::new来包装一下channel,这种就有了read_lines方法了。
use std::fmt::format;
use std::io::{BufRead, Read};
use std::net::TcpStream;
use std::io::BufReader;
use ssh2::Session;
pub struct Config {
pub ip: String,
pub port: i32,
pub username: String,
pub password: String,
}
pub struct SSH {
...
Rust mod中的坑
一开始我认为rust划分mod很简单。我是这样做的。新建一个pack.rs里面写代码
use ssh2::Session;
pub mod pack{
pub struct Config {
pub ip: String,
pub port: i32,
pub username: String,
pub password: String,
}
pub struct SSH {
pub session: Session,
pub config: Config,
}
impl SSH {
pub fn new(ip: &str, username: &str, password: ...
Golang mysql link序列化反序列化
常量变量 option.go
var (
MysqlLinkFormat = "%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local"
MysqlLinkRegex = regexp.MustCompile("((\\w+):(\\w+)@\\w+\\(((?:(?:2(?:5[0-5]|[0-4]\\d))|[0-1]?\\d{1," +
"2})(?:\\.(?:2(?:5[0-5]|[0-4]\\d)|[0-1]?\\d{1,2})){3}):([0-9]+)\\)/(\\w+).*)\\?")
)
mysql link序列化
func DumpsMysqlLink(userna...
Golang tmol配置更新和覆盖配置文件
配置更新
g.Cfg().Set("database.mysql.0.link", dbUrl)
g.Cfg().Set("database.type", toType)
覆盖配置文件
m := g.Cfg().Map()
buf := new(bytes.Buffer)
if err := toml.NewEncoder(buf).Encode(m); err != nil {
glog.Error(err)
}
// bak configuration
gfile.Rename(AppFile, fmt.Sprintf("%s.bak.%s", AppFile, gtime.Now().ISO8601()))
ioutil.WriteFile(AppFi...
共计 84 篇文章,11 页。