使用fswatch工具进行热编译

auto

因为懒所以要写个脚本

今天早上到公司打开电脑,发现电脑又自动重启了,所有的虚拟机和正在调试的程序都被关闭了,于是我又不厌其烦的打开Skype、QQ、ThunderBird、启动两台虚拟机、启动四个Putty、打开OneNote看看开发环境的服务启动方式,输入一行一行的命令……从进入系统到调试环境和服务启动起来浪费了20分钟,于是想干脆写个脚本吧。于是我就现学现用写了个sh脚本完成了开发环境的一键启动,不过这个效率还不算高,最好再弄个热编译,于是找到了这个:fswatch项目地址

fswatch用来干嘛?

“fswatch是一个工具, 通过检测文件的变化,并触发指定的命令”

所以说这就是一个热编译的工具,一旦检测到文件发生了变化,就可以执行一系列的指令重新编译环境,让你可以专注于代码的编写从枯燥又(不)低(能)效(偷)率(懒)的手动编译中跳出来。

fswatch的使用

安装&使用

go get github.com/codeskyblue/fswatch

windows和linux以及mac都可以使用,如果没有编译出fswatch来就执行一下这个试试

go build github.com/codeskyblue/fswatch

好了然后把fswatch拷贝到bin目录下方便以后的使用,接下来cd到需要监听的项目目录下,执行一下fswatch,会提示是否新建一个配置文件,新建好之后用vim打开修改一下,大概是这样子的:

{
“paths”: [“.”], //通常直接写个.就行了,监听当前目录,可以添加多个目录
“depth”: 4, //定义搜索深度
“exclude”: [], //排除文件
“include”: [ “\.(go|h)$”], //监听文件类型
“command”: “/etc/init.d/runChess.sh 5”, //需要执行的命令,这里我写的是一个编译脚本
“env”: {
“POWERD_BY”: “ansiz”
},
“autorestart”: false,
“restart-interval”: 0, //可以定义自动编译时间间隔
“kill-signal”: “KILL”
}

好了大功告成,再在当前目录下输入一下fswatch就启动监听了,在这之后一旦你指定的那些文件发生了改动就会自动编译啦是不是很方便哈哈哈哈。顺便记录一下今天现学现用写的shell脚本,OK收工
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
# Description : Run Chess in development environment
echo "=========Function Select========="
echo "Input Function number:"
echo "1:Run it!!!"
echo "2:Only run Backend server"
echo "3:Only run Webserver"
echo "4:Only restart database server"
echo "5:Auto Compile"
echo "================================="
if [[ $# -lt 1 ]]; then
echo "Please input a number:"
read OPTION
else
OPTION=$1
fi
if [[ $OPTION == 1 ]]; then
. ~/.profile
. $SCHED_ROOT/src/clustertech.com/cls/setenv.sh
screen -S b -d -m go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-backend/*.go
screen -S f -d -m go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-webserver/ctschd-webserver.go
elif [[ $OPTION == 2 ]]; then
echo "Backend server will restart in development environment"
/etc/init.d/ctschd-backend stop
. ~/.profile
. $SCHED_ROOT/src/clustertech.com/cls/setenv.sh
go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-backend/*.go
elif [[ $OPTION == 3 ]]; then
echo "Webserver will restart"
/etc/init.d/ctschd-webserver stop
. ~/.profile
go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-webserver/ctschd-webserver.go
elif [[ $OPTION == 4 ]]; then
echo "Mysql restarted!!..."
/etc/init.d/mysqld stop
rm -f /var/lib/mysql/mysql.sock
/etc/init.d/mysqld start
elif [[ $OPTION == 5 ]]; then
ps -ef|grep ctschd|awk '{printf("kill -9 %s\n",$2)}'
screen -wipe
screen -S b -d -m go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-backend/*.go
screen -S f -d -m go run /opt/workspace/ct-scheduler/src/clustertech.com/main/ctschd-webserver/ctschd-webserver.go
fi

等等,似乎忘了点什么,最后感谢为此提供灵感的女神@Esther

2015年9月28日 22:56:03

坚持原创技术分享,您的支持将鼓励我继续创作!