经常遇到开启后需要占一个终端窗口的应用。写了一个通用的后台运行脚本用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文件