서버에서 프로세스가 실행되고 있는지 확인해야 합니다. 하지만 문제는 내가 사용하는 키워드가 userid가 아니라 o/p 또는 ps 명령의 일부라는 것입니다.
내가 달릴 때 ps -ef | grep -v $$ | grep xenon
내가 얻는 것은
오류: 정크 옵션
사용법: ps [옵션]
추가 도움말 텍스트를 보려면 "ps --help" 또는 "ps --help"를 사용해 보십시오.
자세한 내용은 ps(1)을 참조하십시오. 크세논이 실행되지 않습니다. 오류를 확인하세요: 정크 옵션
서버에서 어떤 이유로 pgrep
내 문제를 해결할 수 있는 O/P를 볼 수 없습니다. 서버운영자입니다.
$ps -ef | grep xenon
venom 3157 95310 0 23:08 pts/5 00:00:00 grep --color=auto xenon
root 45943 1 0 Apr12 ? 00:17:47 /opt/xenon/sganet/agent/lib64/sganetwatchdog -vm=/opt/xenon/sganet/agent/lib64/sganetos -logdir /opt/xenon/sganet/log -ini ../conf/ruxitwatchdog.ini
root 45981 45943 2 Apr12 ? 08:20:31 /opt/xenon/sganet/agent/lib64/sganetos -Dcom.compuware.apm.WatchDogTimeout=9000 -Dcom.compuware.apm.WatchDogPort=5000
$pgrep xenon
$pgrep -c xenon
0
$
기본적으로 검증 서버에서 실행되는 여러 프로세스를 확인하기 위해 작성한 스크립트입니다.
#!/bin/bash
set +x
USER=`whoami`
#pg='ps -ef | grep -v $USER | '
pg='ps ax | grep -v grep | '
#--------function to check process ---------#
check_process() {
$pg $1 >/dev/null && echo -e "$1 is running" || echo -e "$1 is not running, please check "
}
#--------Checking process on the server---------#
echo -e "\n\n checking the processes"
check_process xenon
check_process upnew
답변1
쉘 매개변수 확장이 발생합니다.뒤쪽에파이프라인의 고급 분석줄을 구조화된 명령으로 분할하여 함수 본문이 작성한 대로 실행되도록 합니다.
ps ax '|' grep -v grep '|'
- 즉, 파이프를 리터럴 인수로 사용합니다 ps
. 그렇기 때문에 오류가 발생합니다.~에서ps
(not from grep
!) 은 인수를 이해하지 못한다고 불평합니다 |
.
이 문제는 여러 가지 방법으로 해결할 수 있습니다.
- 변수를 사용하는 대신 함수에 명령을 작성하면 됩니다
pg
. 이것은 나에게 가장 좋은 버전인 것 같지만 실제 스크립트는 더 복잡할 수 있습니다. 비슷한 것이 정말로 필요한 경우 파이프를 포함하는 함수를 사용하십시오.
pg_cmd_1() { ps ax | grep -v grep | $1 } pg=pg_cmd_1
그리고 그대로 진행하세요. 이를 통해 다른 함수를 정의하고
pg
변수를 동적으로 변경하여 필요할 때 사용할 수 있습니다.
또한 현재 작성된 대로 스크립트가 실행을 시도하고 있는데 ps ax | grep -v grep | xenon
아직 원하는 것이 아닌 것 같습니다(하나가 누락되었나요 grep
?).