특정 프로그램이 실행 중인지 확인하는 셸 스크립트를 작성하려고합니다. 그렇지 않은 경우 서비스를 다시 시작합니다. 또한 인터페이스가 무차별 모드인지 확인합니다. 그렇지 않은 경우에는 해당 모드로 전환됩니다. 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
이 이
으로는 첫 번째 명령의 출력을 볼 수있는 디버그 모드에서 실행의 출력입니다입니다 두 번째 명령의 출력이 올바른 반면, 예상되는 것은 아닙니다.
내가 뭘 잘못하고 있니?
하나의 프로세스 만 명령 줄에서 처리 할 수 있다고 가정합니다. –
그건 중요한 질문이 아닙니다. 내가 뭘 물어 보는 이유는 쉘 스크립트가 2를 반환하는 동안 커맨드 라인은 0을 반환합니까? 구문 문제가 있습니까? – RedBaron
스크립트 이름을 보면 문제가 될 것입니다. – Mat