[Linux] shell script crontab 처리 관련 문의

k3kyg의 이미지


=================================================================
#!/bin/bash

## result file exist check
## if result

TODAY=`date +%Y%m%d%H`
DATE=`date +%Y%m%d_%H:%M:%S`

CPU=`top -n 1 |grep Cpu`
MEM=`top -n 1 |grep Mem`
SWAP=`top -n 1 |grep Swap`

OUT_CPU=CPU_${TODAY}

echo "${DATE} ${CPU}" |tee -a ${OUT_CPU}

=================================================================

위와 같은 스크립트를 실행 할 경우

20190923_16:01:11 Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

위와 같이 출력이 되고 있으나, crontab 에 등록 할 경우 아래와 같이 출력 됩니다.

20190923_16:01:11

crontab 등록 후에도 결과 값이

20190923_16:01:11 Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

출력 되도록 하는 방법이 무엇인지 문의 합니다.

raymundo의 이미지

crontab 에 등록할 때

* * * * * 스크립트이름 2> /tmp/error

이렇게 하면 에러 로그가 남고, 그걸 들여다보면

TERM environment variable not set.
TERM environment variable not set.
TERM environment variable not set.

이렇게 에러가 세번 난 걸 보니까 범인은 top 아니면 grep 인데 좀 찾아보니 top이 터미널에 입출력이 연결되어 있지 않을 때 이 에러가 나나보네요.

그래서 man top 하고 찾아보니

       -b  :Batch-mode operation
            Starts top in Batch mode, which could be useful for sending output from top to other programs or to a file.

이런 게 있어서

CPU=`top -b -n 1 |grep Cpu`
MEM=`top -b -n 1 |grep Mem`
SWAP=`top -b -n 1 |grep Swap`

이렇게 고쳐주니 잘 나옵니다.

좋은 하루 되세요!

k3kyg의 이미지

답변 감사합니다.

정상 동작 하는 것을 확인 하였습니다.

좋은 하루 되세요