프로세스, 메모리, 파일시스템 관리를 위한 명령어 입니다. 시스템 운영을 위해 필요한 명령어 입니다.
프로세스, 메모리 관리를 위한 명령어 입니다.
정기적으로 지정한 시간에 실행하고 싶은 명령어를 등록합니다. 스크립트를 등록해도 됩니다.
옵션 | 설명 |
---|---|
-l | 등록된 명령어 리스트 확인 |
-e | 등록된 명령어를 수정 |
-e 옵션으로 실행하면 크론탭을 등록하기 위한 파일이 열립니다. vi 에디터와 동일한 명령으로 필요한 명령어를 등록할 수 있습니다.
# 크론탭을 등록
$ crontab -e
# 등록된 크론탭을 확인
$ crontab -1
크론탭을 등록할 때는 실행하고자 하는 주기와 명령어를 입력합니다. 주기는 분, 시, 일, 월, 요일 형태로 입력합니다. *는 모두를 의미합니다. 매분, 매시, 매일, 모든 요일에 실행하고 싶을 때 사용하면 됩니다.
주기 | 비고 |
---|---|
분 | 0 ~ 59 |
시 | 0 ~ 23 |
일 | 1 ~ 31 |
월 | 1 ~ 12 |
요일 | 0 ~ 7(0, 7이 일요일) |
# 입력형태
분 시 일 월 요일 명령어
# 매 50분에 time.sh 실행
50 * * * * /mnt/usr/time.sh
# 매일 1시에 log로 끝나는 파일을 찾아서 find.log 파일로 저장
0 1 * * * find -name '*.log' ./ >> /text/log/fin.log
# 5분 마다 program.sh 실행
*/5 * * * * /home/user/program.sh
# 4-10 시 사이에 1시간마다 program.sh 실행
0 4-10/1 * * * /home/user/program.sh
# 매일 1시, 3시에 program.sh 를 실행하고 로그를 저장
# 크론탭에 입력할 때 %는 오류가 발생하기 때문에 역슬래쉬(\)로 감싸 주어야 함
0 1,3 * * /home/user/program.sh >> /home/user/logs/`date -u +\%Y\%m\%d.\%H\%M.log` 2>&1
크론탭을 일괄로 등록하고 싶을 때 echo명령을 이용하여 처리할 수 있습니다. /var/spool/cron/유저명 에 유저별 크론탭이 있습니다 여기에 넣어주면 crontab -e와 동일한 효과를 얻을 수 있습니다.
sudo bash -c 'echo \"
# hadoop log cleansing
0 1 * * * find /var/log/hadoop -not -name \"*.gz\" -type f -mtime +2 -exec gzip {} \;
0 1 * * * find /var/log/hadoop -name \"*.gz\" -mtime +14 -delete \" >> /var/spool/cron/user_name'
크론탭 파일은 OS에 따라 위치가 다를 수 있습니다.
주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 셀 프로세스를 대체합니다. 예를 들어 bash쉘에서 자바 프로그램을 실행하면 자바 프로그램의 ppid가 bash쉘이 되고, 자바 프로그램이 bash쉘의 하위 프로세스로 실행됩니다. exec 커맨드로 실행하면 bash쉘의 프로세스가 자바 프로그램이 됩니다. ppid가 따로 업습니다. 그리고 자바 프로그램이 종료되면 프로세스가 종료됩니다. bash쉘로 돌아오지 않습니다.
다음의 상황을 살펴보면 macbook에서 masternode로 접근하여 echo를 실행하면 masternode의 bash쉘 입니다. exec로 명령을 실행하면 bash쉘이 echo 명령으로 대체되고, 종료되면 bash쉘이 없기 때문에 다시 macbook으로 돌아옵니다.
➜ macbook ✗ ssh root@masternode
[root@masternode ~]# echo "aa"
aa
[root@masternode ~]# exec echo "aa"
aa
➜ macbook ✗
옵션 | 내용 |
---|---|
-c | 환경 변수가 없는 상태로 실행 |
-a [name] | 0번째 인수로 이름을 전달 |
-l | 0번째 인수로 대쉬를 전달 |
$ exec echo "aa"
aa
$ exec java -cp '/etc/hadoop/conf' org.apache.hadoop.hdfs.server.datanode.SecureDataNodeStarter
메모리 사용량을 확인하는 명령어 입니다.
옵션 | 내용 |
---|---|
-h | 사람이 읽을 수 있는 GB, MB, KB 형태로 변경하여 출력 |
-s [second] | 지정한 초(second) 마다 이용량 출력 |
메모리 사용량 확인
이름 | 내용 |
---|---|
total | 전체 메모리 용량 |
used | 사용중인 메모리 용량 |
free | 유휴 메모리 용량 |
shared | 공유 메모리 용량. 프로세서, 스레드간 통신을 위해 사용. |
buffers | 버퍼 메모리 용량. 파일 저장을 위한 임시 저장 공간 등. |
cached | 캐쉬 메모리 용량. 자주 사용하는 데이터를 메모리에 캐슁하여 IO 속도 증가 |
$ free
total used free shared buffers cached
Mem: 3921016 1925576 1995440 144 159096 999700
-/+ buffers/cache: 766780 3154236
Swap: 0 0 0
$ free -h
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
주기적인 메모리 사용량 확인
메모리 사용량을 주기적으로 확인하는 방법은 -s 옵션을 이용하는 방법과 watch 명령을 이용하는 방법이 있습니다.
# 1초에 한번씩 메모리 사용량 출력
$ free -h -s 1
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
$ watch free -h
Every 2.0s: free -h Wed May 8 01:32:49 2019
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 750M 3.0G
Swap: 0B 0B 0B
htop은 top보다 사에하게 운영체제의 상태를 모니터링할 수 있는 도구입니다. 설치되어 있지 않은 경우 따로 설치를 하셔야합니다.
# centos
yum install htop
# ubuntu
apt install htop
펑션키를 이용하여 트리구조로 프로세스를 확인하거나 목록으로 확인할 수 있습니다. 메모리, CPU 사용률로 프로세스를 정렬할 수 도 있습니다.
현재 계정에서 실행중인 작업을 표시합니다.
옵션 | 내용 |
---|---|
-l | 프로세스 ID를 표시합니다. |
프로세스 상태
상태 | 내용 |
---|---|
Running | 실행 중 |
Stopped | 일시 중단(Ctrl + Z 입력) |
Terminated | 강제 종료(kill 명령 종료) |
Done | 정상 종료 |
[]로 표시되는 것은 작업의 순서입니다. -는 이전 프로세스, +는 현재 프로세스입니다.
# 실행중인 프로세스를 표시
$ jobs
[1] Stopped watch date
[2] Stopped watch date
[3] Stopped watch date
[4]- Stopped watch date
[5]+ Stopped watch date
# 실행 중인 프로세스의 PID 확인
$ jobs -l
[1] 18129 Stopped watch date
[2] 18188 Stopped watch date
[3] 19726 Stopped watch date
[4]- 19741 Stopped watch date
[5]+ 19751 Stopped watch date
systemctl 로 실행한 systemd의 로그를 확인할 수 있는 명령어 입니다.
옵션 | 내용 |
---|---|
-u | 로그를 출력할 유닛을 지정 |
-o | 출력 형식을 지정. (short, short-iso) |
-f | 신규로 추가 되는 로그를 출력 |
옵션 | 내용 |
---|---|
short | 기본값. 한 행에 하나의 Log만 출력 |
short-iso | 기본값에 ISO 8601의 시간 형식으로 출력 |
short-precise | 기본값에 마이크로 초 단위로 시간 출력 |
short-monotonic | 기본값에 단조로운 시간 형식으로 출력 |
verbose | 전체 Log를 모두 자세하게 출력 |
json | json 형식 |
json-pretty | json 형식을 보기 편하게 출력 |
json-see | json 형식을 Server-Sent Events에 적합한 형식으로 출력 |
cat | 간결하게 출력 |
# 시스템 데몬 로그 출력
$ sudo journalctl -u zookeeper.service -o short-iso
-- Logs begin at Thu 2021-12-30 10:19:49 KST, end at Sun 2022-01-30 08:20:43 KST. --
2021-12-30T13:10:02+0900 hadoop-master-1 systemd[1]: Starting Zookeeper...
2021-12-30T13:10:02+0900 hadoop-master-1 zkServer.sh[10186]: ZooKeeper JMX enabled by default
2021-12-30T13:10:02+0900 hadoop-master-1 zkServer.sh[10186]: Using config: /opt/zookeeper/bin/../conf/zoo.cfg
2021-12-30T13:10:03+0900 hadoop-master-1 zkServer.sh[10186]: Starting zookeeper ... STARTED
프로세스를 종료합니다.
kill은 프로세스에 시그널을 전송합니다. 시그널을 생략하면 TERM 시그널을 전송하여 프로세스를 종료합니다. -9 옵션을 이용하여 프로세스를 강제 종료하는 경우도 많습니다.
시그널 없이 프로세스를 종료하면 프로세스에게 종료를 통지하기 때문에 프로세스가 종료에 따른 후속처리를 진행하고 종료합니다. -9 옵션을 이용하면 프로세스가 종료에 따른 후속처리없이 종료됩니다. 예를 들어 프로세스의 종료에 따라 pid파일, lock파일을 삭제하는 후속 처리가 있다면 -9 옵션을 이용하면 해당 파일을 삭제하지 않고 종료합니다.
시그널 | 번호 | 설명 |
---|---|---|
HUP | 1 | 프로세스에 재기동을 통지한다. |
INT | 2 | 프로세스에 인터럽트를 통지한다. |
QUIT | 3 | 프로세스에 종료를 통지한다. |
KILL | 9 | 프로세스에 강제종료를 통지한다. |
TERM | 15 | 프로세스에 종료를 통지한다. |
STOP | 17 | 프로세스에 중단을 통지한다. |
CONT | 19 | 프로세스에 재개를 통지한다. |
# 잡아이디를 이용한 종료
$ jobs
[1]+ Stopped hive
$ kill -9 %1
# 프로세스 아이디를 이용한 종료
$ ps
PID TTY TIME CMD
15302 pts/0 00:00:00 bash
16357 pts/0 00:00:00 ps
$ kill -9 15302
시스템을 운영하다 보면 로그가 쌓이게 됩니다. 이 로그를 정리할 수 있는 명령어가 logrotate입니다. 이 명령어는 데몬이 아니라서 크론탭을 이용하여 주기적으로 로그를 정리하는 명령을 추가해야 합니다.
옵션 | 내용 |
---|---|
-s | 상태 파일 위치 |
-f | 로그 포맷 옵션 지정 |
로그를 정리하는 포맷은 다음과 같습니다. 정리할 로그의 위치를 지정하고 중괄호를 이용하여 로그를 저장합니다.
daily, weekly, monthly, yearly
- 일별로 처리
rotate
- 정리 주기
dateext
- 일자로 파일 정리
compress
- 압축
rotate
- aa
notifempty
- 파일사이즈가 0이면 처리 안함
create
- 정리한 로그 파일의 권한 설정
copytruncate
- 로그를 정리하고 파일 사이즈를 0으로 변경
olddir
- 정리한 로그를 저장할 위치
/home/deploy/tomcat/logs/weblog.log
{
daily
dateext
compress
rotate 14
notifempty
create 644 deploy deploy
copytruncate
olddir /home/deploy/tmocat/backup
}
# 실행
logrotate -s /home/deploy/logstatus -f /home/deploy/logconf.conf
# 실행 후
# 다음과 같이 로그 처리 압축파일이 생성 됨
total 6000
-rw-r--r-- 1 deploy deploy 4350 Dec 3 17:51 airflow-scheduler.err
-rw-r--r-- 1 deploy deploy 480 Dec 1 11:35 airflow-scheduler.err-20211201.gz
-rw-r--r-- 1 deploy deploy 457 Dec 2 01:00 airflow-scheduler.err-20211202.gz
-rw-r--r-- 1 deploy deploy 97415 Dec 3 22:58 airflow-scheduler.log
-rw-r--r-- 1 deploy deploy 235222 Dec 1 12:27 airflow-scheduler.log-20211201.gz
-rw-r--r-- 1 deploy deploy 6187 Dec 1 23:57 airflow-scheduler.log-20211202.gz
-rw-r--r-- 1 deploy deploy 142176 Dec 3 22:58 airflow-scheduler.out
-rw-r--r-- 1 deploy deploy 8345 Dec 1 12:27 airflow-scheduler.out-20211201.gz
-rw-r--r-- 1 deploy deploy 6875 Dec 1 23:57 airflow-scheduler.out-20211202.gz
명령어의 매뉴얼을 출력합니다
# cp 명령어의 메뉴얼을 확인
$ man cp
리눅스에서 프로그램을 실행할 때 사용자의 세션이 끊어지면(hangup)프로그램도 함께 종료됩니다. 처리에 오랜 시간이 걸리는 프로그램을 실행 할때 nohup 을 이용하여 사용자의 세션이 끊어져도 프로그램은 계속 실행되도록 할 수 있습니다.
nohup 명령을 이용할 때 포어그라운드로 실행하게 되면 다른 작업을 처리할수 없기 때문에 & 를 이용하여 백그라운드로 실행하는 것이 좋습니다.
#text.sh 실행, 표준 출력이 nohup.out 으로 저장
$ nohup test.sh &
# test.sh를 실행하고 표준 출력을 test.log에 저장
$ nohup test.sh > test.log &
OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈소스 구현판이다.