emlog 的一键备份
对于一个托管在 LAMP 虚拟主机(不是 vps)环境下的 emlog 博客,不知道大家平时备份是不是和我一样这么操作的:
- 登陆到后台,备份数据库(当然,或者是用插件定期备份发送到邮箱)
- 用 ftp 备份 content 目录
如果你想简化操作,下面的脚本也许可以帮到你。脚本很丑陋,能完成功能即可。
漫谈 logrotate 与 crond
什么是 logrotate
logrotate 是一款用来切割日志的工具,更确切的说,是切割文本的工具,但通常用在软件日志切割上。为什么要进行日志切割呢?原因可以有很多,最明显的一个就是防止日志文件变得太大。
lorotate的切割方式
以 Nginx 为例,假设其错误日志放在 /data/proclog/log/nginx/ 下,名为 nginx_error.log,当 logrotate 运行时,如果满足切割要求了,则会将 nginx_error.log 改名为 nginx_error.log.1,并重新创建一个新的空文件 nginx_error.log 作为新的错误日志。
当进行其二次切割时,nginx_error.log.1 被改名为 nginx_error.log.2,刚才创建的 nginx_error.log 被改名为新的 nginx_error.log.1,然后再次重新创建一个新的空文件 nginx_error.log 作为新的错误日志投入使用。
当进行第三次切割时,nginx_error.log.2 变为 nginx_error.log.3,nginx_error.log.1 变为nginx_error.log.2,nginx_error.log 变为 nginx_error.log.1,一个新的 nginx_error.log 被再次创建。
uniq、sort 不得不注意的尾部空格(trailing whitespaces)
问题产生背景
自己写的一个基于 FastDFS 的客户端程序的日志格式如下:
|
|
nil、null 与 ngx.null
问题概述
今天第一次使用 Nginx+lua,写了个需要操作 Redis 的后台接口,该接口的功能主要是接受客户端的 json 格式的 post 请求,实现对保存在 redis 中的任务插入、删除、查询等。虽然 Nginx、lua 等都是刚接触,但这几个接口还是顺风顺水的坐下来了,不能忘了感谢春哥章亦春。
在 Redis 中记录的任务其实很简单,每插入一个任务,就在 redis 中增加一个 HASH 结构,每次查询返回该 SET 的各个 Field 和对应的 Value 值,例如 md5,filesize 等。由于任务类型的不同,有的 Field 可能在该任务中不存在,此时在以 json 格式将查询结果返回时不应显示该 Field。
以 md5 域为例,在对当前任务以 md5 域执行 hget 后,应该对返回结果做一个判断,如果该 HASH 结构并没有设置 md5 这个域,则跳过,继续执行后面的逻辑,如果设置了 md5 域,则把该域的 Value 取出来,插入到结果 table 中,后续再作为 json 格式返回结果的一部分,返回给后台。