기타 시스템 관리 SPARCS 10 채승우
리눅스 부팅에 관한 설명 추가 case by Ubuntu 바이오스 → 부트로더 → 커널 부팅 → init 실행 → runlevel에 맞는 프로세스 실행 → 사용자 로그인 우분투에서는… init 대신 upstart 이용 박용수 선배님이 메일로 지적해 주신 부분 추가합니다. 저번 세미나 때, 리눅스의 부팅과정을 위와 같이 설명하였습니다. 그러나 우분투에서는 이 과정이 약간 바뀐다고 합니다. 바로 init 대신에 upstart가 쓰인다는 점이다. 이는 이벤트 기반으로 작동하며, inittab이나 sysinit과 같은 파일은 존재하지 않는다. 다른 리눅스에서는 init에서 runlevel에 맞는 데몬들을 켜고 끄는 반면 우분투에서는 upstart가 이 역할을 대신한다.
Upstart - 이벤트-작업 기반 시스템 - 실행 중 장치가 추가, 삭제 고려(USB 등) - 비동기식 이벤트에 기반하여 비동기식으로 작동 - 데몬의 시작, 중지, 감시를 스스로 함 - 데몬이 시작하기 전후, 중지되기 전후에 원하는 작업 설정 가능 upstart의 특징은 이벤트-작업 기반 시스템이라는 점으로, 실행 중에 여러 장치가 추가되고 삭제되는 환경을 고려했다는 점이다.(USB 메모리 라던가, 외장 하드 등) Upstart용 스크립트 파일은 전통적인 rc init 파일과 비슷하게 작동한다. 단, 비동기식 이벤트에 기반하여 비동기식으로 작동한다는 점만 다르다 Upstart는 데몬의 시작, 중지, 감시 작업을 스스로 한다. 따라서 start-stop-daemon 등을 이용하여 개발자가 스스로 관리해야 하는 것과 다르게 프로그램 경로와 인수만 주면 된다.또한 데몬이 시작하기 전과 후, 중지되기 전과 후에 원하는 작업을 추가할 수 있다. 다른 리눅스에서도 설치가 가능하다. 더욱 자세히 알고 싶은 분은 아래 링크를 읽어보시면 될 것 같습니다. http://lily.mmu.ac.kr/lecture/08sm/Ubuntu1/Ubuntu_1Team_booting.htm
Scheduling Jobs Using cron cron을 이용한 작업 스케줄링 자동화된 일 처리 crontab 명령 이용 /var/spool/cron/crontabs/[username]에 저장 crond 라는 데몬에서 위 파일을 규칙적으로 읽 어, 지정된 시간에 명령을 실행. 실제로는 cron이라는 명령은 없고, crond라는 데몬과 crontab라는 유틸리티로 구성 일부 시스템에서는 root만 사용가능 컴퓨터의 원래 목적 중 하나는, 일상적인 일의 자동으로 처리해주는 것이다. 예를 들어 매일 새벽 3시에 디스크를 백업을 해야 한다거나 여러 가지 일이 있을 수 있다. 이러한 것을 쉽게 해주는 것이 바로 cron이다. 사용자는 crontab명령을 이용하여, 이러한 작업을 추가할 수 있다. 그리고 이런 명령들은 /var/spool/cron/crontab/[username]에 저장된다. 이렇게 저장된 파일은 crond라는 데몬이 규칙적으로 읽어, 정해진 시간에 지정된 명령이 실행된다. 스팍스 서버의 경우에는 일반 사용자는 /var/spool/cron까지는 접근 가능하나, 그 이후로는 접근 할 수 없다.
cron은 콘솔에 아무 내용도 출력하지 않는다. 다만, 출력 내용이나 에러메시지는 모두 crontab을 만든 사람의 메일로 보내진다. (다른 곳으로 보내고 싶은 경우, crontab파일 제 일 상단에 MAILTO=aaa@aaa.aaa 를 추가한다.) cron에 추가된 작업 보기 $ crontab –l
예시: 0 2 15 jan,jul sun sh runcron $ crontab –e cron에 저장된 작업의 형태 분 시 일 월 요일 명령 예시: 0 2 15 jan,jul sun sh runcron 그러면 이제 crontab에 어떤식으로 저장되는지, 어떤식으로 명령을 추가하는지 알아보도록 하자. crontab –e 명령을 치면, vim이 뜨면서 작업을 입력할 수 있는 창이 뜬다.(정확히는 crontab파일 수정이라고 볼 수 있다. 다만 crontab에 작업 명령을 한줄 추가하는 것이 작업 추가와 같은 얘기가 된다.) crontab에는 위의 형태대로 작업이 입력된다. 분: 0~59, 시: 0~23, 일: 1~31, 월: 1~12(or jan~dec), 요일: 0~6(or sun~sat), 명령: 여러 개 실행가능(세미콜론으로 구분) 예시의 의미는 “1월과 7월의 15일에, 그 날이 일요일이면 오전 2:00에 sh runcron을 한다.”이다. 여기서 중요한 점은 명령 앞부분에 시간을 정해주는 부분이 모두 and로 연결된다는 점이다.(즉 모두 만족해야지만 명령이 실행된다.)
예1: 0 1. [command] 예2: 0 1 1. [command] 예3: 0 1 예1: 0 1 * * * [command] 예2: 0 1 1 * * [command] 예3: 0 1 * * mon [command] 예4: 0 1 1,15 * * [command] 예5: 0 1 1-15 * * [command] 예6: 0 1 */5 * * [command] 좀 더 작업이 실행되는 날짜를 구체적으로 만들어보자. 각 필드에는 앞서 말한 정수범위(혹은 문자열)만 들어갈 수 있는 것이 아니다. 별문자(*)나, 콤마(,)나, 하이픈(-) 같은 문자도 들어갈 수 있다. 예시들을 보면서 앞서 말한 문자들이 어떻게 사용되는지 알아보자. 예1: 매일, 오전 1시에 작업 실행 예2: 매달 1일, 오전 1시에 작업 실행 예3: 매주 월요일, 오전 1시에 작업 실행 예4: 매달 1일과 15일, 오전 1시에 작업 실행 예5: 매달 1일에서 15일까지, 오전 1시에 작업 실행 예6: 매 5일마다 오전 1시에 작업 실행(1일, 6일, 11일, … 순으로 진행된다)
$ crontab –r : 저장된 crontab 삭제 # crontab –u [username] [옵션]: 다른 사용자의 crontab 변경 여기서 주의할 점이 있다. 아래 창에서 보면 알 수 있듯이 crontab –r 명령은 저장된 crontab파일 자체를 날려버리는 명령어이다. 따라서 어느 한 작업만 수정하고 싶다면 crontab –e 명령을 쳐서, 그 작업에 해당하는 줄을 지우고 저장하여야 한다. 루트의 경우, 다른 사용자의 crontab을 수정할 수 있다. 예를 들어 news라는 데몬이 news라는 계정을 이용하는데, 이 news가 정기적으로 업데이트를 원한다던지 하는 작업을 할 때, news라는 사용자 앞으로 crontab을 만들어 이용할 수 있다. 보통 crontab파일을 수정할 때에는 #으로 주석을 넣어 어떤 작업을 실행하고자 하는지를 명시한다.
$HOME, $USER, $SHELL 같은 환경 변수를 이용 0 1 * * * find /tmp –atime 3 –exec ls -l {} \; >> /home/[username]/log 0 1 * * * find /tmp –atime 3 –exec ls -l {} \; >> /home/[username]/log 2>&1 crontab: 본 쉘 명령만 사용 가능 $HOME, $USER, $SHELL 같은 환경 변수를 이용 명령이 길 때는 쉘 스크립트 이용 아까 crontab의 출력내용은 화면에 출력되지 않고, 메일로 발송된다고 하였다. 그러나 파일로도 저장하여 그 내용을 볼 수 있다. 첫 번째 명령은, crontab에 의해 나올 메시지를 표준 출력으로 보이게 한다. 단 에러메시지의 경우는 전과 같게 메일로 발송된다. 반면 두 번째 명령은, 에러메시지의 경우도 화면에 출력하도록 하게 하였다. crontab에는 본 쉘의 명령어 밖에 이용할 수 없다. 따라서 bash같은 데서 지원하는 물결표(~)같은 별칭(홈 디렉토리를 의미하는 약어)은 사용할 수 없다. 대신 $HOME, $USER, $SHELL같은 환경 변수를 인식하므로 이를 대신 이용하면 된다. 명령이 너무 길다고 판단되는 경우에는 쉘 스크립트를 짜서 그 파일을 정해진 시간에 실행하게끔 만드는 것도 가능하다.
- 작업을 한 번만 실행하기 cron을 사용하면 앞서 본 것 처럼 정해놓은 날에 같은 작업을 반복할 수 있다. 그러나 굳이 반복하지 않고, 1번만 실행시키고 싶을 때도 있다. 예를 들어, 밤 늦은 시간에 어떤 ftp서버에 들어가서 용량이 큰 파일을 다운받는다거나 하는 일이 있다. 그럴 때 사용하는 것이 at 명령이다. 먼저 at명령을 이용하려면 atd라는 데몬이 실행되어 있어야 한다.(SPARCS 서버에는 이 데몬이 없더군요) at [시각] (+ [숫자] days) 입력 // 언제 명령을 실행시킬 것인지 결정한다. at 명령의 사용하기 위해 시간을 반드시 입력해야 한다. 경고문이 뜬다. // 이는 at에서 이용할 쉘이 지금 사용하는 것과 다른 /bin/sh을 이용한다라는 것을 경고하는 것이다. “at > ” 이 뜨면 실행할 명령을 차곡차곡 입력하면 된다. 다 입력한 뒤에 ctrl + d 를 누르면 “<EOT>”가 화면에 뜨면서 입력이 종료된다. 이렇게 추가된 명령은 atq 명령어를 통해 볼 수 있으며, atrm [작업 번호] 명령을 통해 제거할 수 있다.
Managing System Logs 시스템 로그 관리하기 syslogd 데몬이 관리 /etc/syslog.conf 에서 설정 가능 (최근 시스템에서는 /etc/rsyslog.conf에서 설정) facility.level (; facility.level … ) [파일] facility: 메시지를 생성하는 시스템 어플, 기능 level: 메시지의 등급 정보 시스템 로그의 관리는 syslogd라는 데몬이 관리한다. 보통 /etc/syslog.conf에서 그 설정을 변경할 수 있다.(그러나 요즘 들어서는 /etc/rsyslog.conf 에서 관리 할 수 있다.)
여기서 살펴보면 daemon에서 나온 메시지는 모두 /var/log/daemon.log에 저장되고, kern에서 나온 메시지는 모두 /var/log/kern.log에 저장되는 것을 알 수 있다.
debug, info, notice, warning, err, crit, alert, emerg facility: mail, kern, user, auth, *, … level: debug, info, notice, warning, err, crit, alert, emerg facility에는 mail(메일 데몬의 경우), kern(커널의 경우), user(사용자 프로그램의 경우), auth(login이나 su같은 인증 프로그램의 경우), *(모든 기능) 같은 값이 들어간다. level의 경우에는 debug, info, notice, warning, err, crit, alert, emerg의 값이 들어가며, 오른쪽으로 갈수록 점점 상황이 심각해짐을 나타낸다.
스팍스 서버의 /var/log/rsyslog 스팍스 서버의 /var/log/rsyslog.conf 파일을 더 살펴보면 news에서 나온 메시지들은 각각 level에 맞게 분류되어 저장되는 것을 볼 수 있다. 그리고 “*.emerg”파일은 로그인 된 모든 사용자에게 그 메시지를 출력하도록 설정되어 있는 것을 볼 수 있다.
log비우기: cat /dev/null > logfile 재시작: kill –HUP `cat /var/run/rsyslog.pid` syslogd에 의해 기록된 메시지는 보통 어떤 프로세스나 어떤 기능이 메시지를 보냈는지 인식한 날짜와 메시지 자체를 한 줄에 기록한다. 위쪽은 kern.log파일을 살펴본 것이고, 아래쪽은 auth.log파일을 살펴본 것이다. 로그파일은 시스템 문제를 추적할 때 중요하다. 그러나 이러한 로그가 쌓이다 보면 굉장히 용량이 커지게 된다. 따라서 log를 비워주어야 하는 상황이 발생하는데, 위의 명령을 이용하면 log파일은 그대로 두고 내용물만 비울 수 있어 유용하다. (뒤에 가서 더 알아보도록 하자.) syslogd의 설정파일을 수정하였다면 이를 반영하는 작업을 거쳐야 한다. 이럴 때 사용하는 것이 kill –HUP ‘cat /var/run/rsyslog.pid’ 명령이다. (백쿼드(`)를 이용하므로써 프로세스 ID를 구할 수 있다.) 이 외에도 다른 시스템 로그들이 있다.
/var/log/wtmp 파일은 사용자가 시스템에 로그인한 시간과 연결한 기간을 가리키는 바이너리 데이터를 담고 있다 /var/log/wtmp 파일은 사용자가 시스템에 로그인한 시간과 연결한 기간을 가리키는 바이너리 데이터를 담고 있다. 이것을 이용하여 last 명령에서는 최근 로그인한 내역을 보여준다. 로그인한 유저, ,접속한 위치, 접속을 시작한 시간 – 접속을 끊은 시간 의 항목이 표시된다. 현재 계속 로그인 상태인 경우에는 접속을 끊은 시간에 시간대신 ‘still logged in’ 이라는 문자가 나타난다.
wtmp에는 로그인한 흔적뿐 아니라 시스템 리부트 내역까지 기록된다.
/var/log로 들어가서, lastlog 명령을 치면 마찬가지로 로그인 내역을 볼 수 있다 /var/log로 들어가서, lastlog 명령을 치면 마찬가지로 로그인 내역을 볼 수 있다. 이 로그인 내역은 앞서 본 wtmp와는 약간 다른 모습인 것을 알 수 있다. lastlog에서는 모든 사용자가 나열되어 있고, 해당 사용자가 언제 어디서 접속하였는지를 볼 수 있다. wtmp는 시간을 위주로, lastlog는 유저를 위주로 보여준다고 생각할 수 있다.
mv /var/log/messages /var/log/messages-backup cp /dev/null /var/log/messages CURDATE=‘date + “%m%d%y”’ mv /var/log/messages-backup /var/log/messages- $CURDATE gzip /var/log/messages-$CURDATE 로그를 정리하는 쉘 스크립트 로그 파일은 매우 커질 수 있으므로 충분한 하드디스크 용량을 가지고 있지 않은 경우, 용량이 부족해 질 수 있다. 그러나 그렇다고 로그 파일을 자주 지우기에는 로그에 담긴 정보가 굉장히 중요하다. 따라서 로그 파일을 처리하는 방법 중 하나는, 로그 파일을 다른 이름으로 복사하고 그 복사한 파일을 압축하여 놓는 것이다. 이렇게 함으로써 cron에 추가하여 규칙적으로 이런 작업을 할 수 있고, 굳이 cron에 추가하지 않아도 쉽게 작업할 수 있다. 위의 작업을 하나씩 설명해보면, 우선 log파일의 이름을 messages에서 messages-backup으로 변경한다. 그 다음 log파일을 깨끗이 비운다. 다음 CURDATE에 현재 월일년을 넣어, 이를 이용하여 파일이름을 다시 바꿔준다. 마지막으로 gzip을 이용하여 압축을 한다.
로그 순환(log rotation): 오래된 로그 제거 로그 관리 - 일정한 기간에 따라 - 일정 용량에 따라 그러나 압축은 근본적인 해결방법이 아니다. 로그 순환(log rotation): 오래된 로그 제거 일부 배포판에서는 savelog나 logrotate와 같은 스크립트 제공 아까의 방법은 일정한 기간에 따라 로그를 백업하기 위해 만들어진 쉘 스크립트이다. 이 방법 외에도 로그가 일정 용량이 넘어가면 로그를 백업하도록 만들 수도 있다. 이렇게 하더라도 누적되면 아까와 같은 문제가 발생할 수 있다.(용량문제) 따라서 이를 해결 하기 위해서는 로그 압축파일의 개수를 정해놓고(예를 들면 10개), 그 개수가 넘어가면 가장 오래된 것을 지우는 방법을 취한다. 이러한 방식을 “로그 순환(log rotation)”이라 한다. 일부 배포판에서는 이와 같은 작업을 해주는 savelog나 logrotate와 같은 스크립트를 제공한다.
Setting Terminal Attributes 터미널 상태 설정하기 setterm 명령(텍스트모드의 가상 콘솔에서만) setterm –foreground white –background blue setterm –store But 스팍스 대부분의 사람은 Putty 이용 X윈도우의 쉘은 다른 방법으로 설정 setterm은 키보드의 반복 속도, 탭 스톱, 텍스트 색상과 같은 터미널의 다양한 속성을 설정하는 명령이다. 보통 각각의 가상 콘솔의 색상을 변경하기 위해 이 명령을 사용한다. 이렇게 함으로써 현재 자신의 어느 가상 콘솔을 사용하고 있는지 색상을 통해 확인할 수 있게 된다. 첫 번째 명령은 배경은 파란색으로, 글씨는 흰색으로 설정을 바꾸는 명령이다. 두 번째 명령은 터미널의 속성을 기본값으로 변경하는 명령이다. 만일 터미널 설정이 정말 망가졌다면 reset 옵션을 주어 터미널을 쓸만한 설정 상태로 되돌려 놓는다. 그러나 보통의 스팍스 사람들은 스팍스 서버에 접속하기 위해 putty를 이용하므로 텍스트모드의 가상 콘솔 형태의 터미널을 볼 일이 없고, 또한 다른 배포판에서 제공하는 터미널은 별개의 방법으로 설정한다.
예를 들어 우분투에서는 “편집 > 프로파일 기본 설정”을 통해 터미널의 모습을 변화시킬 수 있다.
감사합니다.