[Linux] 쉘스크립트 crontab 동작시 /dev/null 2>&1 효과

댓글 0

기술집/서버관련

2017. 11. 13.




간만에 쓰네요. 전문적인건 ㅋ

오늘 월요일... 지난번에 인터넷 나야나 사태이후로 또 그쪽계열의 서버에서 랜섬웨어 감염소식이 들린후로

간만에 사이트 소스 및 파일들의 백업이 필요하다고 생각해서 파일들을 찾았습니다.

그런데... 이런젠장.


사이트 백업 파일들이 8월부터 제대로 백업이 안되고있었던것.

흡사 서버 이전후, OS 및 아파치 버전업 이후로 기존에 잘 되던 스크립트가 안먹히던

 그 현상과 동일했습니다.





▼ 8월부터 용량이 줄어든 img 파일



7월까지는 사이트 이미지 압축파일 용량이 약 47MB 정도입니다.

하지만  8월에는 1MB도 안되고... 9월부터는 더 줄어듭니다.

파일이 삭제된거아냐?? 천만에요.

백업 스크립트를 수동으로 동작시키면 47MB 용량으로 압축이 됩니다.

crontab 으로 하면 안되구요.

이전과 완전 동일한 현상... 그것도 파일 백업한건 제대로 되는데.. 왜 이미지만???



crontab 에 들어있는 한줄입니다.


20 4 1 * * root /root/bin/(유저명)/(사이트이름)_site


매월 1일, 새벽 4시20분에 root 권한으로 저 스크립트 파일을 실행해라.

라는 내용이죠.

혼자서 이래저래 막 생각하다가... 예전처럼 tar 명령어를 절대경로로 바꿔도 봤습니다만

전부 실패...

그러다가 이걸 추가했죠.

바로 제목에도 나와잇는...


/dev/null 2>&1

우선 테스트하던 한줄에 뒤로 붙였습니다.

*/1 11 * * * root /root/bin/(유저명)/(사이트이름)_site > /dev/null 2>&1


그랬더니!!! 어머나 세상에 성공!!!

도대체 이게 뭐길래 성공을 한대요????




▼ 실제 crontab 설정



일단 성공을 했으니.. 인증샷!!!






▼ 원래대로 인식되어 압축된 결과물



어떤가요??? 47MB 용량으로 돌아왔습니다.

그동안 이미지 파일이 좀 늘어서그런지... 용량도 살짝 올랐죠???

그래서... 혹시라도 그냥 실행하면 잘 되는데 crontab 설정으로 실행하면 제대로 용량인식이

안된다는 현상이 있을때에는 다음과 같은 두가지 처리방법이 기록됩니다.



1. 명령어를 절대경로로 실행해봐라.

2. 스크립트 실행시 /dev/null 2>&1 을 붙여라




그럼 여기서 짚어봐야겠죠??


Linux 에서 /dev/null 2>&1 의 의미란 무엇인가??


지정한 명령어 처리결과. 그리고 발생할지 모르는 에러메세지를 출력하지않고

모두다 버려버린다는 의미입니다.

 null 이 뭔지는 아시죠???


좀 더 자세히 들어가자면....

2 : 표준에러

> : 리다이렉트

&1 : 표준출력


표준에러가 발생하면 /dev/null 에다가 리다이렉트로 표준출력해라.


즉... /dev/null 에다가 에러를 출력하라는 말이랍니다.

/dev/null 은 블랙홀처럼 모든걸 다 버리는곳이라고 보면 되니까..

에러가 나오면 저기다가 출력하고, 동작은 정상동작시켜라!! 라고 보시면 될듯하네요.

&1 에서 &의 목적은... 1 이라는 표준출력이라는 상태를 나타내기 위함이라고합니다.

& 없이 2>1 이라고 한다면.... 1은 파일명으로 인식이 된다고하네요.



그리고, 어떤 에러에 어떤 결과물이 나오는지 궁금하시면

/dev/null 대신에 파일이름을 넣어주시면 됩니다.




휴.. 어렵네요 ㅎㅎㅎ

그래도 또 하나 배워갑니다 ㅎㅎ