服务器备份工具

目前维护着几个服务器,所以需要一个备份工具帮忙备份。本文记录一下需求。

目前维护着几个服务器,所以需要一个备份工具帮忙备份。因为都是 wordpress,所以

  1. 可以访问 wordpress 的安装路径
  2. 可以部署在服务器上
  3. 最好是 PHP,方便 require wp-config.php

备份的内容:

  1. 备份数据库,直接访问 wp-config.php 就行
  2. 备份 wp-uploads,这里要支持差异化备份了
  3. 备份服务器配置,包括:
    1. php 配置
    2. nginx 配置
    3. crontab 配置

备份的处理:

  1. 每次备份的内容打一个压缩包,命名为 服务器-站名-日期-时间.zip
  2. 将备份后的内容上传到指定服务器
  3. 还需要开发一个本地工具,用来从制定服务器上下载备份文件到本地(服务器存储有点贵)
  4. 自动删除半年前(可配置)前的备份文件

差不多这样,想起来随时补充

记一个正则问题

`$` 和 `\b` 虽然并不能匹配到一个确定的字符,但它们同样意义重大;不特定长度匹配,包括 `*`,`+`,甚至 `{n, m}`,在懒惰模式下,后面都要尽量跟上明确的结束条件,以便让前面尽快结束。

前几天写代码,遇到一个需求:

  1. 解析 sleep NUMBER 这样的命令
  2. 能够识别缺参数或者参数错误的情况

这个正则并不复杂,初步写出来大概是这样:sleep\s+(.*)。这样,$1 就是参数,然后就可以检验。但是 .* 匹配“任意字符出现零次或多次”,所以实际测试发现它根本不匹配任何参数。

然后我就改成了 sleep(?:\s+(.*))?,然后在下一步 trim。这样,sleep 后面整个都是可选参数,就能解决上面的问题。

然后就被老板骂了……老板的答案是 sleep\s+(.*?)\s*$。重点在于后面的 $,要求正则必须匹配行尾,这样一来,懒惰模式的 .*? 就需要一直匹配到行尾,并且尽量少匹配内容,所以诸如 a b 之类的情况也可以正常跑匹配了。


从这里,我学到:

  1. $\b 虽然并不能匹配到一个确定的字符,但它们同样意义重大
  2. 不特定长度匹配,包括 *+,甚至 {n, m},在懒惰模式下,后面都要尽量跟上明确的结束条件,以便让前面尽快结束。

NAS 的作用

想搞一个开源的 NAS,用一些开源软件拼装。这样比较好利用家里的旧电脑,还可以搭一个软路由什么的。

想搞一个开源的 NAS,用一些开源软件拼装。这样比较好利用家里的旧电脑,还可以搭一个软路由什么的。

  1. 家用,没有那么高的存储要求,也没有那么高的数据安全要求——还有网盘备份
  2. 功能可以渐进,比如先流媒体播放,然后离线下载,然后手机备份之类的

现在想一想有什么功能,需要什么工具来完成:

1. 流媒体播放

之前用过 Red5,不过好像只支持 Flash。不过内网的话,一个普通 http 服务器应该就够了,网络环境稳定,不需要改变码率。然后最好支持断点续传。

估计:Nginx

2. 离线下载

离线下载主要是没有图形界面比较麻烦,不然的话,aria2 + youtube-dl 应该够了,可以考虑自己简单写一个。

软件:

  • aria2 = BT 下载
  • youtube-dl = 从 Youtube 上下一些老电影

3. 资源搜索

暂时不知道

4. 手机备份

暂时不知道

5. 局域网存储

暂时不知道

Failed to start php-fpm.service: Unit php-fpm.service is masked.

升级服务器到 Ubuntu 18.04 后,php 的源也升级到 7.2,此时 php7.1 的一些模块已经没了,所以要换用 7.2 的功能。

周末手一抖把服务器从 17.10 升级到了 18.04,然后博客就挂掉了。

根据提示信息,nginx 应该正常工作,问题多半出在 PHP 上。service --status-all 之后,果然 php7.1-fpm 没有启动。然后照常 service php7.1-fpm start,咦,奇怪,报错了:

Failed to start php7.1-fpm.service: Unit php7.1-fpm.service is masked.

换用 service php-fpm start 也一样,区别就是 service 名字不太一样。然后 Google 之,没找到很靠谱的说法,但是找到一个类似的情况,发生于使用 do-release-upgrade 升级到 16.04 时,php5-fpm 启动不了,报类似的错误,解决方案是升级到 php7。

如此一来我也试试好了,因为直接 apt install php-fpm 会解析出来 php7.2,所以我尝试 service php7.2-fpm start,果然可以。既然如此,干脆升级到 7.2 好了,反正我也没啥特殊要求。

于是修改站点配置文件,把 php 接口指向 7.2 的 socket,然后安装几个欠缺的模块,终于又把博客跑起来了。

XPS13 2018 新版顶配开箱

新笔记本到了,XPS13 2018新款高配,学人家开个箱。

2016年从前司离职的时候,为了能够移动办公,经过再三对比,选择了当时较新的 XPS13 中配版本 i7-7500T+8G+256G。XPS 是 Dell 的高端品牌,比同配置的其它品牌要贵一些,买之前心里比较忐忑,实物到手后才放下心来:真是一分价钱一分货,XPS 设计感十足、屏幕色彩丰富、散热良好、噪音很小、待机超长,确实比以前 5K 附近的笔记本好用得多。

以前做前端,对性能感受不太明显。如今我厂日常很多编译工作,对 CPU 要求颇高,这一代 CPU 低主频低睿频少核心的劣势就很明显(主要是 2017年之前农企太不给力),使用体验明显差于 2015 年买的 iMac(i7 4核4G),可以参考前文:升级依赖的一些小感受。所以我早早就动了换本子的念头,尤其是 Intel 发布第八代酷睿之后,各大笔记本厂商纷纷升级换代,我也一直都在关注。基于前面使用 XPS13 的良好体验,我的第一目标是新 XPS13 顶配版:

  1. 更轻薄体积更小
  2. 待机时间更长
  3. 带指纹识别的开关
  4. 触控屏(没办法,触控的确更符合人类天性)

不过新品 16999 的售价让我望而却步,打算等到双11,降价+优惠之后,再择机购买。这样一来老机器也能物尽其用,免得被领导批评。结果前两天我鬼使神差的打开 Dell 官网,惊讶的发现竟然直降 3000,在京东 16999 的同时,官网只要 12999 就能入手。而且使用招行信用卡可以分期,虽然不免手续费,但也还可以接受。

这……简直……不容错过呀……

于是我只有……先买为敬了……

于是我反复对比配置,确定降价的型号真的是顶配无误,才颤抖着点下下单按钮。

接下来,经过长达一周百爪挠心的漫长等候(真是被京东惯坏了……),今天终于拿到了新本子。立刻开箱:

继续阅读“XPS13 2018 新版顶配开箱”

新讲堂:职场新人必修课——社保个税创业股票贷款买房晋升考评等

5月份讲堂预告:职场新人必修课——社保个税创业股票贷款买房晋升考评等,地址:https://segmentfault.com/l/1500000014575853?_ea=3676068,欢迎光临。

按照年初制定的每月一次直播讲堂的计划,现在就要准备5月份的讲堂了。考虑再三,结合平时在 QQ 群里解答大家的问题的经验,我打算继续深挖“职场新人”的需求,这次的计划分享关于社保个税等非技术相关但又非常重要的主题。

计划围绕主角小宅,在职场生涯各个阶段面临的问题来组织这场讲堂。我也正好回顾一下自己的职业生涯:

  1. 非科班,靠自学 Flash 找到第一份工作
  2. 快速成长,当上前端组组长
  3. 遇到第一个职业瓶颈,难以突破
  4. 艰难离职,缺乏跳槽经验,找了一家外包公司,并不合适,于是半年后二进宫
  5. 产品方向取得突破,700人公司进入核心管理层,遇到第二个职业瓶颈
  6. 再次离职,工资突破性成长,突破技术瓶颈
  7. 加入初创公司
  8. 努力做大做强,跟各部门合作
  9. 创业失败,扫地出门

这么一看,我还真的很合适做这个话题,哈哈。

内容大纲

内容主要分为客观部分和主观部分:

客观部分:

  1. 社保养老医保商保公积金个税
  2. 保密协议竞业禁止接私活
  3. 买房贷款
  4. 生孩子报销
  5. 期权与股票
  6. 晋升与跳槽

主观部分:

  1. 工作中的常见误区
    1. 过分信任老板
    2. 过分信任同事
    3. 是金子总会发光的?
  2. 如何认识加班?
  3. 如何认识头衔?
  4. 学会背锅,学会汇报——升职加薪的阶梯
  5. 大城市奋斗,小城市养老?
  6. 如何突破阶层壁?

面向受众:

  1. 应届生,大学生
  2. 刚刚开始工作不久的新人

讲堂地址:

职场新人必修课——社保个税创业股票贷款买房晋升考评等

开始之前都会有早鸟票,欢迎光临。

尬聊会:第八期

尬聊会第8期实录。介绍了竞业禁止的相关知识;以及性能对比测试的相关知识。

第7期去哪儿了……

视频在此:尬聊会第八期 竞业禁止/性能对比测试

时间:2018-04-22 21:45
地点:我的斗鱼直播间 douyu.tv/meathill
回看视频:http://blog.meathill.com/tech/galiao-8.html

0. 竞业禁止

  • 什么是竞业禁止
  • 竞业禁止有哪些注意事项

1. 性能对比测试

  1. 什么是性能对比测试
  2. jsperf.com
  3. 性能对比测试的细节

实录地址:

2018-04-22 尬聊会 第8期实录

下期预告:

下下周因为 SF 直播的关系,下周没有尬聊会,下下周周日见。


欢迎加入肉山小课堂一同学习,QQ 群:肉山小课堂答疑交流群 628056148,SF 圈子:肉山小课堂继续深造中心

使用 Pug 和 Stylus 开发小程序的 watch 脚本

小程序开发有两点比较蛋痛:1. 每个页面必须有3个文件,wxml,js,wxss;2. 使用 wxml 替代 html,使用 wxss 替代 css,使得默认的编译失效。这个脚本用来帮助我们使用 pug 和 stylus 进行开发。

首先,我试用了 Wepy,丑的一逼,遂放弃。

小程序开发有两点比较蛋痛:

  1. 每个页面必须有3个文件,wxml,js,wxss
  2. 使用 wxml 替代 html,使用 wxss 替代 css,使得默认的编译失效

Webpack 在这里不太适用,因为 1,我们并非要把所有代码打包到一起。WebStorm 的 File Watcher 也不适用,因为它输出的文件扩展名是固定的(跟 pug 和 stylus 源程序有关)。于是我经过摸索了,使用 gulp 脚本解决了这个问题,代码如下:

import gulp from 'gulp';
import pug from 'gulp-pug';
import rename from 'gulp-rename';

const pugFiles = 'pages/**/*.pug';

// 通用的 pug 处理,可以把 pug 转译并改名为 .wxml 文件
async function doPUG(path) {
  gulp.src(path)
    .pipe(pug())
    .pipe(rename({
      extname: '.wxml',
    }))
    .pipe(gulp.dest('./pages'));
}

// 将所有 pug 进行转译
gulp.task('pug', async () => {
  return doPUG(pugFiles);
});

// 侦听 .pug 文件的变化,并转译被修改的
gulp.task('watch', ['pug'], () => {
  gulp.watch(pugFiles, ({path}) => {
    doPUG(path);
  });
});

接下来,开发的时候,只要运行 gulp watch 即可。

用类似的方式,我们还能处理 stylus -> css,这里就不详述了,大家可以自己试一试。

完整的 gulpfile 在 GitHub 仓库里,请自行取用。