经常遇到开启后需要占一个终端窗口的应用。写了一个通用的后台运行脚本用nohup在后台运行,将运行pid输出到文件,可以查看nohup.out中的输出内容。适用于GoAgent、grant watch、rails开发模式等。可以把脚本加在~/.bash_profile中,实现登陆后自动启动。修改PROGNAME中的内容为要运行的程序名,修改run中的运行命令为你要执行的命令即可。

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh
PID=0
DIR=`dirname $0`
PIDFILE=$DIR/nohup.pid
OUTFILE=$DIR/nohup.out
PROGNAME='GoAgent'

run() {
nohup $DIR/proxy.py>>$OUTFILE 2>&1 & echo $!>$PIDFILE
}

init() {
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
fi
}

check() {
if [ $PID -eq 0 ]; then
return 1
else
kill -0 $PID 2>/dev/null
fi
}

start() {
init
check
if [ $? -eq 0 ]; then
echo "$PROGNAME is run!" && exit 1
else
run
echo "Start $PROGNAME!" && exit 0
fi
}

silent() {
init
check
if [ $? -eq 0 ]; then
exit 1
else
run
exit 0
fi
}

restart() {
init
check
if [ $? -eq 0 ]; then
kill -9 $PID>/dev/null 2>&1
fi
run
echo "Restart $PROGNAME!" && exit 0
}

stop() {
init
check
if [ $? ]; then
kill -9 $PID>/dev/null 2>&1
echo "$PROGNAME is stop!" && exit 0
else
echo "$PROGNAME is not run!" && exit 1
fi
}

status() {
init
check
if [ $? -eq 0 ]; then
echo "$PROGNAME is run!" && exit 0
else
echo "$PROGNAME is not run!" && exit 1
fi
}

output() {
if [ -f $OUTFILE ]; then
watch -n 1 tail $OUTFILE
else
echo "$OUTFILE is not find!" && exit 1
fi
}

clean() {
if [ -f $OUTFILE ]; then
rm -f $OUTFILE
fi
if [ -f $PIDFILE ]; then
rm -f $PIDFILE
fi
echo 'Clean success!' && exit 0
}

case "$1" in
start)
$1
exit 0
;;
silent)
$1
exit 0
;;
restart)
$1
exit 0
;;
stop)
$1
exit 0
;;
status)
$1
exit 0
;;
output)
$1
exit 0
;;
clean)
$1
exit 0
;;
*)
echo $DIR
echo 'Usage: {start|stop|restart|silent|status|output|clean}'
;;
esac

命令说明:
start 启动
silent 安静模式启动(无输出)
stop 停止
restart 重启
status 查看运行状态
output 查看输出
clean 清除out和pid文件