레이블이 stdin인 게시물을 표시합니다. 모든 게시물 표시
레이블이 stdin인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 19일 일요일

Linux : Crontab stdout,stdin Redirect

crontab 메일 받지 않기 설정

# vi /etc/crontab
                               변경
    MAILTO=ROOT ----------> MAILTO=""


crontab 표준출력 , 표준에러 지우기



cron으로 작업이 걸려있으면 정상종료후 출력문, 에러시 출력문이 모두 root메일로 발송된다
따라서 정지적으로 고나리하지 않으면 root메일 파일의 크기가 굉장히 커지게 된다
이럴때는 cron작업이 정확하거나, 혹은 무시할만한 에러라면 모두 널로 처리하면된다
:cron으로 실행되는 작업들의 표준출력, 표준에러를 없애 root메일로 보내지 않도록 설정

실행하려는 쉘파일 1> /dev/null 2> /dev/null
=>1:표준출력, 2- 표준에러

#crontab -e
 실행쉘파일 2>&1 > /dev/null

ex) 00 00 * * * /root/backup.sh > 2>&1 > /dev/null
    00 00 * * * /root/backup.sh > /dev/null 2 >&1

처음 메일받지않기만 설정했을때도 메일이 왔었습니다.
crontab 표준출력, 표준에러로 지우고서는 테스트를 해보아야 합니다.

2015년 4월 16일 목요일

CMD : 출력 재지향 (Redirection/stdin/stdout)

Redirection : 프로그램은 기본적으로 stdin(0)은 키보드, stdout(1)은 화면, stderr(2)은 화면으로 설정이 된다.
                      stdout과 stderr의 차이는, stdout은 버퍼를 거쳐서 화면에 뿌려진다.
                      따라서 버퍼가 다 차기 전까지는 화면에 뿌려지지 않는다.
                      반면에 stderr은 버퍼를 사용하지 않기 때문에, 출력할 데이터는 바로 바로 화면에 뿌려진다.
                      이렇게 기본적으로 설정된 것들을 사용하지 않고, 다르게 사용하고 싶을때
                          재지향 기호 
> 를 사용한다.
              command1  >  filename  :  command1의 stdout출력을 화면이 아니라,  filename으로 보낸다.
                                                         command1의 stderr은 기존처럼 화면에 뿌려진다.
              command1  <  filename  :  command1의 입력을 키보드로부터 받는것이 아니라, filename으로 부터 받는다.
              command1  <  infile > outfile :
                  키보드가 아니라 infile로 부터 입력을 받고, stdout을 화면이 아니라 outfile로 출력을 한다.
                  command1의 stderr은 기존처럼 화면에 뿌려진다.
              command1 2> file  :  command1의 stdout은 화면으로, stderr은 file로 보낸다.
              command1 > file 2>&1     :  
                   command1의 stdout은 file로, stderr은 stdout으로 보낸다.
                   즉 stdout과 stderr모두 file로 보낸다.
                   이 문장을 간단하게 표기하는 또 다른 방법은 command1 &>file  command1 >&file이다.

                command1 >nul : command1의 stdout출력을, 화면에 뿌리는 것이 아니라, 그냥 버린다.

        파이프 :   command1 | command2 : command1의 stdout출력을 command2의 입력으로 보낸다. 
                      이것은  command1 > tempfile,   command2 < tempfile, del tempfile 과 동일하다.
                      command1, command2의 stderr은 기존처럼 화면에 뿌려진다.
                      command1   2>&1  | command2 :
                         command1의 stdout과 stderr을 모두, command2의 stdin으로 보낸다.




---------------------------------------------------------------------------------------

 Sample Code >


SET count_gb=%1
SET server_ip=%2
SET regfile= %Temp%bmsenv.reg
SET tnsfile=c:orantnetworkadmintnsnames.ora


echo %server_ip% ping .......
echo.
PING %server_ip% -n 1 >NUL 2>&1IF ERRORLEVEL 1 (
        ECHO.
        ECHO Warning !!
        ECHO DB Server %server_ip% is not available
        ECHO Check Server IP Address or Server Status
        GOTO END
)

DEL *.BAK > NUL 2>&1
> NUL : 정상 화면 출력을 NUL(버리고), 

2>&1 : 에러 출력을 &1 화면출력한곳으로, 즉 NUL로...