저는 쉘 스크립팅을하는 완전 초보자이며, 약간의 쓰기를 시도하고 간단한 응용 프로그램을 실행 시키려고합니다. 응용 프로그램을 시작할 수는 있지만 호출 된 스크립트의 PID를 저장해야 할 때 스크립트 자체의 PID를 저장하므로 중지하거나 다시 시작할 수 없습니다. 여기가 PID 얻기를 위해 실행하고 내 스크립트입니다다른 스크립트에서 호출중인 스크립트의 PID를 저장합니다.
#!/bin/sh
JAVA_BIN=/usr/local/jdk7/jre/bin/java
test -x $JAVA_BIN || { echo "$JAVA_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of needed script file
NEW_SCRIPT=/usr/local/me/myscript.sh
test -r $NEW_SCRIPT|| { echo "$NEW_SCRIPT does not exist";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
PID_FILE=/var/run/newd.pid
USER=newuser
HOME_DIR=/usr/local/me
LOG_FILE=/var/log/newd.log
HOST_NAME=some.hostname.com
case "$1" in
start)
echo "Starting newd..."
cd ${HOME_DIR} || (\
echo "can't cd to homedir"; exit 1
)
sudo -u ${USER} ${NEW_SCRIPT} >> ${LOG_FILE} 2>&1 &
echo "PID: "
echo $!
echo "\n"
echo $! > ${PID_FILE} || (
echo "error storing pid to ${PID_FILE}"; exit 1
)
;;
stop)
echo "Shutting down newd..."
/bin/kill `cat ${PID_FILE}`
;;
restart)
$0 stop
sleep 5
$0 start
;;
status)
echo "Checking for service newd..."
statc=$(curl -I http://${HOST_NAME}:8080/test/url | head -n1 | grep HTTP | awk '{print $2}')
if [ "$statc" != "200" ]; then
echo "down"
exit 1
fi
echo "OK"
#ps u -p `cat ${PID}`
exit 0
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
rc_exit
시작 명령이 스크립트를 호출 한 후에는 PID를 보여주고,이 경우 3을 말할 수와 PS의 출력은 다음과 같습니다
root 3 sudo -u me /usr/local/me/myscript.sh
me 6 /bin/sh /usr/local/me/myscript.sh
me 7 PID which I want
나는 PID로 삼을 저장하고 같은
, 그때 나는 정지 7을 가지고 싶어 응용 프로그램이 아닌 3
는 누구나 망치고 내 스크립트의 어떤 부분이 나를 도울 수 있기 때문에, 그것은 실패, 응용 프로그램을 중지하려고 예상 된 PID?
그래서 나는 pid에 관한 질문을했습니다. 나는 테스트를 통해 제대로 프로세스를 죽일 수있는 방법을 찾으려고 노력했습니다. 내가 죽이고 싶은 프로세스는 항상 sudo +2의 PID입니다. 그래서 그 pid + 2 값을 죽이려고 할 수 있습니까? 또는 사용 가능한 pids에 따라 임의의 값입니까? – stephanruhl
+2 일을 잘 처리 할 수 있습니다. 항상 발생하는 것은 아니므로 해결 방법이 아닙니다. 내 생각 엔 – stephanruhl
아니요. 일반적인 해킹은 파일 (예 : /var/lib/myapp/child.pid)에 PID를 쓰고 아버지에게 다시 읽도록 할 수있는 손자를 가지고 있습니다 ... –