CentOS 서버에 SSH 연결 후에 잠시 다른 창에서 작업하고 있으면 창이 꺼지는 바람에 이유를 찾아보니

/etc/bashrc 파일의 TMOUT 환경변수 때문이었다.


TMOUT=300

readonly TMOUT

export TMOUT



보안상으로 세션의 타임아웃 값을 지정해 일정 시간동안 동작이 없으면 자동으로 로그아웃하는 것이 권장되지만, 테스트 서버에서는 불편하기만 한지라..(편리함을 얻고 보안을 버린다!는 망언) TMOUT 값을 지우려고 unset을 해보았다.


$ unset TMOUT

bash: PI: readonly variable


/etc/bashrc 파일에서 readonly TMOUT 이라고 된 것을 확인했을 때는 값만 변경할 수 없는 줄 알았더니,

환경 변수의 삭제 또한 할 수 없었다.



구글링을 통해 쉽게 Stackoverflow에서 답을 찾을 수 있었다.


$ readonly PI=3.14

$ unset PI

-bash: unset: PI: cannot unset: readonly variable

$ cat << EOF| sudo gdb

attach $$

call unbind_variable("PI")

detach

EOF

$ echo $PI


$


gdb를 통해 bash의 unbind_variable 메서드를 호출함으로써 변수를 제거한다.

답변 작성자에 따르면 이는 일종의 핵이며(디버거를 통해 프로세스 내부의 함수를 호출하는 것이므로), 추천하는 방법이 아니라고 한다. 사용 시의 위험에 대해서는 본인이 책임지라고 적어두었다.


참 재미있는 쉘 스크립트의 세계 'ㅅ'


참고 : Stack overflow - Unset readonly variable in bash

'밤을 지새다 > Linux' 카테고리의 다른 글

readonly 환경 변수의 삭제  (0) 2015.07.03

리눅스에서 curl로 JSON을 받았을 때 Pretty Print가 되어있지 않으면 참 읽기 난감하다.

내용을 복사해서 JSON Viewer로 옮겨서 봐도 되지만 매번 그렇게 하기에는 번거로운 일이기도 해서 "cli json pretty print"을 키워드로 구글링하니 편한 방법을 찾을 수 있었다.


파이썬 2.6 이상이 설치되어 있다면 아래와 같이 커맨드를 실행시키면 된다.

$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool

{

    "bar": "ipsum", 

    "foo": "lorem"

}


그럼 위의 출력 결과처럼 보기 좋게 나온다.



참고 자료

http://stackoverflow.com/questions/352098/how-can-i-pretty-print-json


Ubuntu 위에서 톰캣을 이용해서 웹 애플리케이션을 돌리고 있는데, 이놈의 시간대가 바뀌질 않는다.

"리눅스 시간 설정"을 키워드로 해서 검색한 글들을 참고해서 시스템의 타임존 설정 및 시간 동기화를 해보고,

톰캣에 JAVA_OPTS를 추가해서 톰캣의 타임 존을 설정해보기도 했으나 효과가 없다.

(startup.sh에 JAVA_OPT 변수를 추가한 것은 적용이 전혀 되지 않는 듯 하다. 아마 잘못해서 그런 거겠지만..쉘에서 date 명령어를 실행하면 원하는 대로 한국 시간대에 맞춰 KST로 표현이 되지만, 서버에서 출력하는 타임존은 계속 UTC다.


여러 방법을 시도하던 중에 dpkg-reconfigure tzdata 명령어를 이용해서 아시아/서울로 지정하니, 웹 서버에서 출력하는 시간대가 KST가 되었다.  (이 전에 /usr/share/zoneinfo에 있던 Asia/Seoul 타임존을 /etc/localtime에 링크 했었으나 원하는 대로 동작하지 않았다.)


dpkg-reconfigure tzdata 를 이용해서 서버의 로컬 시간대 설정


date 명령어에서 사용하는 timezone 정보와 자바(혹은 톰캣)에서 사용하는 timezone의 참조 하는 설정 값이 서로 다른가 보다. 이래서 모르면 몸이 고생한다. 얼마나 헤매었는지 모르겠네.


자바(혹은 톰캣)에서 사용하는 타임존의 설정은 /etc/localtime을 참조한다.

$ more /etc/localtime

타임존을 서울로 수정한 후 위 명령을 수행하면 KST-9를 확인할 수 있다.


현재는 해외에서 접속할 일이 없는지라 서버의 시간대를 한국표준시로 설정했지만 나중에 국제화나 지역화를 고려한다면 시간대에 대해 정확하게 이해하고서 사용해야겠다.


References...

리눅스 시간 설정(ikinox님) - http://ikinox.tistory.com/70

http://hacksforge.com/How-to-change-time-zone-in-Ubuntu-Linux.html

http://www.christopherirish.com/2012/03/21/how-to-set-the-timezone-on-ubuntu-server/

https://mail-archives.apache.org/mod_mbox/tomcat-users/200501.mbox/%3C45b72a5705012008352dcc3a39@mail.gmail.com%3E


+ Recent posts