리눅스 운영중에 쉘에 시작(start)과 종료(stop) 그리고 재시작(restart) 파라메터를 받아서 해당 작업을 수행하는 방법을 설명합니다.
1. 쉘 스크립트 만들기
아래 코드는 참고자료의 링크에 해당하는 내용입니다. 아래 예제는 memcached 명령을 예시이며 사용하고자 하는 로직에 따라 수정하여 사용합니다.
#!/bin/bash
#
# 쉘이 실행할 명령을 아래의 내용을 수정합니다.
################################################################
BASE=/tmp
PID=/tmp/app.pid
LOG=/tmp/app.log
ERROR=/tmp/app-error.log
PORT=11200
LISTEN_IP = '0.0.0.0'
MEM_SIZE=4
CMD='memcached'
COMMAND='$CMD -p $PORT -l $LISTEN_IP -d -m $MEM_SIZE -v -p $PID'
################################################################
USR=user
status() {
echo
echo "==== Status"
if [ -f $PID ]
then
echo
echo "Pid file: $( cat $PID ) [$PID]"
echo
ps -ef | grep -v grep | grep $( cat $PID )
else
echo
echo "No Pid file"
fi
}
start() {
if [ -f $PID ]
then
echo
echo "Already started. PID: [$( cat $PID )]"
else
echo "==== Start"
touch $PID
if nohup $COMMAND >>$LOG 2>&1 &
then echo $! >$PID
echo "Done."
echo "$(date '+%Y-%m-%d %X'): START" >>$LOG
else echo "Error... "
/bin/rm $PID
fi
fi
}
kill_cmd() {
SIGNAL=""; MSG="Killing "
while true
do
LIST=`ps -ef | grep -v grep | grep $CMD | grep -w $USR | awk '{print $2}'`
if [ "$LIST" ]
then
echo; echo "$MSG $LIST" ; echo
echo $LIST | xargs kill $SIGNAL
sleep 2
SIGNAL="-9" ; MSG="Killing $SIGNAL"
if [ -f $PID ]
then
/bin/rm $PID
fi
else
echo; echo "All killed..." ; echo
break
fi
done
}
stop() {
echo "==== Stop"
if [ -f $PID ]
then
if kill $( cat $PID )
then echo "Done."
echo "$(date '+%Y-%m-%d %X'): STOP" >>$LOG
fi
/bin/rm $PID
kill_cmd
else
echo "No pid file. Already stopped?"
fi
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop ; echo "Sleeping..."; sleep 1 ;
start
;;
'status')
status
;;
*)
echo
echo "Usage: $0 { start | stop | restart | status }"
echo
exit 1
;;
esac
exit 0
2. 쉘 스크립트 실행하기
실행방법은 ./shell.sh 명령뒤에 start, stop, restart, status를 붙이면 됩니다.
[root@localhost tunnel.server]# ./tunnel.sh start
Started...
[root@localhost tunnel.server]# ./tunnel.sh restart
Stoped....
Killing 17959
Sleeping...
Started...
[root@localhost tunnel.server]# ./tunnel.sh status
Pid file: 17626 [/var/run/tunnel.pid]
root 17626 1 0 09:40 ? 00:00:11 java -classpath /root/tunnel.server/.......
[root@localhost tunnel.server]# ./tunnel.sh stop
Stoped....
Killing 17626
Killing -9 17829
참고자료
start_stop_memcached_script.sh
gist.github.com/tinogomes/447191/f751239eb48e3341b18a79b11995cee7978ee77b
728x90
'Tips, Tricks > Server, Windows, Linux' 카테고리의 다른 글
Nginx에서 WebSocket 사용하기(Using WebSocket with Nginx) (0) | 2021.09.30 |
---|---|
Automatic .bat file execution when Windows starts(윈도우 시작시 자동으로 bat파일 실행하기) (0) | 2021.03.26 |
Registering and using the service on CentOS 7(CentOS 7에 서비스 등록하고 사용하기) (0) | 2021.03.26 |
.bat without cmd window(CMD창 없이 .bat 파일 실행하기) (0) | 2021.03.26 |
Install NginX on CentOS 7(CentOS 7에 NginX 설치하기) (0) | 2021.03.26 |