2012-04-16 3 views
0

특정 프로그램이 실행 중인지 확인하는 셸 스크립트를 작성하려고합니다. 그렇지 않은 경우 서비스를 다시 시작합니다. 또한 인터페이스가 무차별 모드인지 확인합니다. 그렇지 않은 경우에는 해당 모드로 전환됩니다. xyz가 실행되는 음식물, 나는 명령 줄셸 스크립트를 사용하는 프로세스 수를 계산합니다.

ps -ef | grep -v grep | grep xyz | wc -l 

는, progrma가 실행되고 있지 0 반환하는 경우에 다음과 같은 작업을 수행 할 수있는 경우

다른는 인터페이스 있는지 확인하는 유사

를 실행, 확인하려면 PROMISC 모드에있는 것은 내가 명령 줄

ip link show eth0 | grep -i promisc | wc -l 

수익이 1 다시 경우에 다음을 수행 할 수 있습니다, 인터페이스 PROMISC 모드에 있습니다.

문제는 쉘 스크립트에서 모두 번들로 만들 때 발생합니다.

#!/bin/bash 
SERVICE="daemonlogger" 
x=$(ps -ef|grep -v grep|grep $SERVICE|wc -l) 
if [ "$x" -eq 1 ]; then 
run=0 
else 
run=1 
fi 
IF_NAME="eth0" 
y=$(ip link show $IF_NAME|grep -i promisc|wc -l) 
if [ "$y" -eq 1 ]; then 
: 
else 
ifconfig $IF_NAME promisc up 
fi 
if [ "$run" -eq 1 ]; then 
service $SERVICE restart > /dev/NULL 2>&1 
fi 
echo $run 

명령 줄에서 실행하면 명령의 출력은 다음

[[email protected] Desktop]# ps -ef | grep -v grep | grep daemonlogger | wc -l 
0 
[[email protected] Desktop]# ip link show eth0 | grep -i promisc | wc -l 
0 

[[email protected] Desktop]# bash -x check_daemonlogger 
+ SERVICE=daemonlogger 
++ ps -ef 
++ wc -l 
++ grep daemonlogger 
++ grep -v grep 
+ x=2 
+ '[' 2 -eq 1 ']' 
+ run=1 
+ IF_NAME=eth0 
++ grep -i promisc 
++ ip link show eth0 
++ wc -l 
+ y=0 
+ '[' 0 -eq 1 ']' 
+ ifconfig eth0 promisc up 
+ '[' 1 -eq 1 ']' 
+ service daemonlogger restart 
+ echo 1 
1 
이 이

으로는 첫 번째 명령의 출력을 볼 수있는 디버그 모드에서 실행의 출력입니다입니다 두 번째 명령의 출력이 올바른 반면, 예상되는 것은 아닙니다.

내가 뭘 잘못하고 있니?

+1

하나의 프로세스 만 명령 줄에서 처리 할 수 ​​있다고 가정합니다. –

+0

그건 중요한 질문이 아닙니다. 내가 뭘 물어 보는 이유는 쉘 스크립트가 2를 반환하는 동안 커맨드 라인은 0을 반환합니까? 구문 문제가 있습니까? – RedBaron

+3

스크립트 이름을 보면 문제가 될 것입니다. – Mat

답변

2

힌트 : 귀하의 스크립트는 무엇입니까?

+0

Ohh RedBaron

1

정확하게 대답은 아니지만 많은 의견이 있습니다.

  1. 당신은 pidfile를 사용하기보다는 과정을 추적하기 위해 PS, GREP, 화장실 등에 의존 고려해야합니다. 파일에 pid를 쓰고이를 사용하여 프로세스가 실행 중인지 확인하십시오. 현재 접근 방식으로 이미 오류가 발생했습니다.

  2. 왜 인터페이스 상태를 확인 하시겠습니까? 어쨌든 무차별 모드로 전환 할 수 없습니까? 나는 이걸 가지고 놀지는 않았지만 이것이 나에게 일어난 첫 번째 일이다.

관련 문제