date 命令小结

最近做的最多的就是把 Hive 查询写到 Shell 脚本中定时调度,常见的有按小时、按天、按周、按月来调度。

所以日期参数的传递就比较重要,这里做一下 date 命令的简单总结。

1. 格式

date [OPTION] [FORMAT]

2. 选项

选项一般是 --date(简写 -d)。

3. 格式

%Y   年,如:2016
%m   月, (01..12)
%d   日,两位
%u   day of week (1..7); 1 is Monday
%V   ISO week number, with Monday as first day of week (01..53)

4. 例子

# 格式化日期
date -d 20160101 +%Y-%m-%d
# 依据某一天进行加减
date -d "-1 days 20160101" +%u
# 文本化的输入
date -d "last sunday" +%Y-%m-%d

Vagrant

1. 简介

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。

我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。

2. 安装

2.1 安装 VirtualBox

sudo apt-get install virtualbox-5.0

2.2 安装 Vagrant

下载地址:http://downloads.vagrantup.com/ 根据提示一步步安装。

sudo apt-get install vagrant

2.3 下载官方封装好的基础镜像:

如果你要其他系统的镜像,可以来这里下载

3. 相关操作

3.1 添加镜像

如果下载镜像的存放路径为 ~/path/to/image.box,那么添加 box 的方法为:

vagrant box add <BOX_NAME> ~/path/to/image.box

3.2 初始化开发环境

cd ~/path/to/dev_dir
vagrant init <BOX_NAME> #切换目录
vagrant up #初始化

接着配置环境参数。

vagrant ssh
cd /vagrant

~/path/to/dev_dir 目录对应虚拟机中的 /vagrant

3.3 其他设置

Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。

Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式。这种方式比较麻烦,新开和修改端口的时候都得编辑。相比较而言,host-only 模式显得方便多了。打开 Vagrantfile,将下面这行的注释去掉(移除#)并保存:

config.vm.network :private_network, ip: "192.168.33.10"

重启虚拟机,这样我们就能用 192.168.33.10 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。

3.4 打包

vagrant package

4. 常用命令

vagrant init  # 初始化 
vagrant up  # 启动虚拟机 
vagrant halt  # 关闭虚拟机 
vagrant reload  # 重启虚拟机 
vagrant ssh  # SSH 至虚拟机 
vagrant status  # 查看虚拟机运行状态 
vagrant destroy  # 销毁当前虚拟机

5. 注意事项

使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:

# Apache 配置添加: 
EnableSendfile off 
# Nginx 配置添加: 
sendfile off;

参考文章

使用 Vagrant 打造跨平台开发环境

为 MySQL 表添加 ctime 和 mtime

1. 序

以前在使用 Ruby on Rails 的时候,框架自动会为每张表增加 mtimectime 两个字段,最近在手动建 MySQL 表的时候对这两个字段做了一点研究。

2. 字段的初始化和更新方式

  1. TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: 在创建新记录和修改现有记录的时候都对这个数据列刷新。
  2. TIMESTAMP DEFAULT CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它。
  3. TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为 0,修改字段时更新。

当你给一个 timestamp 设置为 on update current_timestamp 的时候,其他的 timestamp 字段需要显式设定 default 值

3. 实例

CREATE TABLE if not exists mybatis.person(
  id BIGINT not null auto_increment PRIMARY KEY,
  name VARCHAR(20) NOT NULL DEFAULT '',
  phone VARCHAR(15) NOT NULL DEFAULT '',
  email VARCHAR(50) NOT NULL DEFAULT '',
  ctime TIMESTAMP DEFAULT '0000-00-00 00:00:00',
  mtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)ENGINE=innodb DEFAULT CHARSET=utf8 COLLATE=utf8_bin;