我转到现在这个海外事业部的时候,这边使用的开发环境和测试环境都是docker。每个开发者都有自己的docker开发环境,自测通过后,部署到测试环境。

但是使用的时候,发现开发环境和测试环境都有一个问题,就是不论是service还是portal的日志,每30分钟就被清空了,我以为是被log4j归档了,看了下归档文件夹,里面有这个日志文件,但是文件为空。

这个问题实实在在困扰我了好久,因为无法追查历史日志,导致测试报问题的时候,只能去重现实时tail日志,非常麻烦。

我一开始以为就是log4j配置的归档时间是每30分钟,但是我看了log4j的配置文件,是1个小时,线上也是这个配置,线上没有这个问题。

后来我怀疑,是不是这个docker本身对某些卷定时操作,但是我看了下docker的启动配置,也没有。

并且,每个人的开发环境和测试的测试环境都有这个问题,很很很很奇怪!

再来后,开发任务紧张,这件事就放下了。

- 阅读剩余部分 -

首先,crontab要执行的任务要有输出日志,表明任务执行过。

然后,另起一个crontab任务,去监控上面的这个日志,比较日志的更新时间,判断任务是否执行,从而提醒。

下面是我在实际生产环境中使用的一个脚本示例:

timestamp() {
  date +"%s"
}
url="http://报警url"

last_mofidy_timestamps="$(stat -c %Y /home/example/example.log)"
echo $last_mofidy_timestamps

current_timestamps="$(timestamp)"
echo $current_timestamps

if (($current_timestamps - $last_mofidy_timestamps > 3600)); then
    curl $url
fi

我的blog使用了cloudflare的https,在typecho里也开始https后,初看一切正常,但是登录后台时,返回302,重定向到了登录页。

我在网上搜索了好久,记录下解决方案。

修改typecho下的这个文件:

config.inc.php

增加如下代码:

define('__TYPECHO_SECURE__', true);

上篇文章提到了生成唯一的短字符串,应用在给每个用户生成一个唯一的邀请码,这个可以扩展到给每个商品生成一个唯一的编号,给每个地点生成一个唯一的标识等等。

但是,唯一的短字符串还有另外一个场景,就是靓号,比如说QQ靓号,直播间的房间号,这些场景下,如果随机生成一些字符串可能并不如人意,需要将某些靓号整理出来,专门给运营发放。

最先想到的就是把靓号全部找出来,存储起来,然后还是按照原来的算法生成唯一短字符串,只是当随机到这些靓号的时候,重新生成,也就是要多查一次而已。

相对的,可以把非靓号存储起来,生成的时候从非靓号里取,这样避免了一次查询,这个方案的关键就是非靓号的存储,非靓号可比靓号数目大得多,使用redis还是rds需要权衡一下。(如果使用redis,可以使用set这个数据结构,使用spop进行处理)

最近有这么一个需求,要给每个用户生成一个唯一的邀请码,用户可以将这个邀请码分享出去,当新用户使用这个邀请码注册登录的时候,就会给邀请者和被邀请者双方发放奖励。

常见的方法有如下几种:

  1. 直接使用用户uid做邀请码,简单直接,就好像其他app中填入邀请者的手机号一样
  2. 对uid做hash生成一串字符串做邀请码,这个主要是为了避免用户的uid泄露,但是要保存用户uid和邀请码的对应关系
  3. 采用对称加密算法加密uid,这样直接根据邀请码就可以解出用户uid,不需要保存uid和邀请码的对应关系了

我们这边的用户uid是纯数字的,共有13位,给这13位uid生成hash或加密的话,结果会较长,不方便用户分享和填写,产品经理限制邀请码长度为6位,同时生成的邀请码中不能要oO1ILl等容易混淆的字符。

- 阅读剩余部分 -