<systemctl로 서비스 예제>


먼저 httpd를 설치한다.

$ sudo yum install httpd
(참고로 예시로 사용할 crond는 이미 설치되어 있고 실행중인 데몬이다.)


systemctl 데몬 관련 커맨드

* systemctl start : 데몬 시작
* systemctl stop : 데몬 종료
* systemctl restart : 데몬 재시작
* systemctl reload : 데몬 reload (예, apache graceful )
* systemctl status : 데몬 상태 확인
* systemctl enable : 활성화 - 부팅 이후에도 계속 데몬을 실행할지 
* systemctl disable : 활성화 - 부팅 이후에도 계속 데몬을 실행안하도록
* systemctl is-enabled : 활성화인지 확인한다.
* systemctl is-active : 동작 중인지 확인한다.



예시

$ sudo systemctl start httpd.service

$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since 수 2016-05-11 17:58:17 KST; 4s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 11784 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─11784 /usr/sbin/httpd -DFOREGROUND
           ├─11785 /usr/sbin/httpd -DFOREGROUND
           ├─11786 /usr/sbin/httpd -DFOREGROUND
           ├─11788 /usr/sbin/httpd -DFOREGROUND
           ├─11791 /usr/sbin/httpd -DFOREGROUND
           └─11792 /usr/sbin/httpd -DFOREGROUND

$ sudo systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since 수 2016-05-11 17:58:17 KST; 21s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 11784 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─11784 /usr/sbin/httpd -DFOREGROUND
           ├─11785 /usr/sbin/httpd -DFOREGROUND
           ├─11786 /usr/sbin/httpd -DFOREGROUND
           ├─11788 /usr/sbin/httpd -DFOREGROUND
           ├─11791 /usr/sbin/httpd -DFOREGROUND
           └─11792 /usr/sbin/httpd -DFOREGROUND

$ sudo systemctl restart httpd.service
$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since 수 2016-05-11 17:58:53 KST; 2s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 11831 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 11836 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─11836 /usr/sbin/httpd -DFOREGROUND
           ├─11837 /usr/sbin/httpd -DFOREGROUND
           ├─11838 /usr/sbin/httpd -DFOREGROUND
           ├─11839 /usr/sbin/httpd -DFOREGROUND
           ├─11840 /usr/sbin/httpd -DFOREGROUND
           └─11843 /usr/sbin/httpd -DFOREGROUND

$ sudo systemctl reload httpd.service
$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since 수 2016-05-11 17:58:53 KST; 20s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 11831 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 11859 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 11836 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─11836 /usr/sbin/httpd -DFOREGROUND
           ├─11860 /usr/sbin/httpd -DFOREGROUND
           ├─11861 /usr/sbin/httpd -DFOREGROUND
           ├─11862 /usr/sbin/httpd -DFOREGROUND
           ├─11863 /usr/sbin/httpd -DFOREGROUND
           └─11864 /usr/sbin/httpd -DFOREGROUND

$ sudo systemctl stop httpd.service
$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: inactive (dead) since 수 2016-05-11 17:59:22 KST; 1s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 11883 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 11859 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
  Process: 11836 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
 Main PID: 11836 (code=exited, status=0/SUCCESS)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"

$ sudo systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

$  systemctl is-enabled httpd.service

disabled

$  systemctl is-active httpd.service

unknown

$  systemctl is-active crond.service

inactive

$  systemctl is-enabled crond.service

enabled





서비스 설정 파일 확인하기


$ ls -al /usr/lib/systemd/system/httpd.service

-rw-r--r-- 1 root root 752 11월 20 06:35 /usr/lib/systemd/system/httpd.service

ls -al /usr/lib/systemd/system/crond.service

-rw-r--r--. 1 root root 284  7월 31  2014 /usr/lib/systemd/system/crond.service







<systemctl 커맨드 맛보기>


서비스 타입중 현재 실행중인 시스템 서비스 목록 보기


$ systemctl -t service -a --state running

UNIT                              LOAD   ACTIVE SUB     DESCRIPTION

proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point

session-30.scope                  loaded active running Session 30 of user deploy

acpid.service                     loaded active running ACPI Event Daemon

auditd.service                    loaded active running Security Auditing Service

dbus.service                      loaded active running D-Bus System Message Bus

getty@tty1.service                loaded active running Getty on tty1

irqbalance.service                loaded active running irqbalance daemon

network.service                   loaded active running LSB: Bring up/down networking

ntpd.service                      loaded active running Network Time Service

rsyncd.service                    loaded active running fast remote file copy program daemon

rsyslog.service                   loaded active running System Logging Service

snmpd.service                     loaded active running Simple Network Management Protocol (SNMP) Daemon.

sshd.service                      loaded active running OpenSSH server daemon

systemd-journald.service          loaded active running Journal Service

systemd-logind.service            loaded active running Login Service

systemd-udevd.service             loaded active running udev Kernel Device Manager

dbus.socket                       loaded active running D-Bus System Message Bus Socket

systemd-journald.socket           loaded active running Journal Socket

systemd-udevd-control.socket      loaded active running udev Control Socket

systemd-udevd-kernel.socket       loaded active running udev Kernel Socket


LOAD   = Reflects whether the unit definition was properly loaded.

ACTIVE = The high-level unit activation state, i.e. generalization of SUB.

SUB    = The low-level unit activation state, values depend on unit type.


20 loaded units listed.

To show all installed unit files use 'systemctl list-unit-files'.



시스템의 모든 서비스의 간단한 모든 상태 정보를 보고 싶다면, 다음을 사용한다. 


$ systemctl --type service --all


UNIT                                  LOAD   ACTIVE   SUB     DESCRIPTION

acpid.service                         loaded active   running ACPI Event Daemon

auditd.service                        loaded active   running Security Auditing Service

brandbot.service                      loaded inactive dead    Flexible Branding Service

cloud-config.service                  loaded active   exited  Apply the settings specified in cloud-config

cloud-final.service                   loaded active   exited  Execute cloud user/final scripts

cloud-init-local.service              loaded active   exited  Initial cloud-init job (pre-networking)

cloud-init.service                    loaded active   exited  Initial cloud-init job (metadata service crawler)

crond.service                         loaded inactive dead    Command Scheduler

dbus.service                          loaded active   running D-Bus System Message Bus

display-manager.service               not-found inactive dead    display-manager.service

dracut-shutdown.service               loaded inactive dead    Restore /run/initramfs

emergency.service                     loaded inactive dead    Emergency Shell

exim.service                          not-found inactive dead    exim.service

getty@tty1.service                    loaded active   running Getty on tty1

ip6tables.service                     not-found inactive dead    ip6tables.service

iptables.service                      not-found inactive dead    iptables.service




유닛 파일 타입의 systemctl로 사용할 수 있는 시스템 서비스 목록을 본다.



$ systemctl list-unit-files

UNIT FILE                              STATE

proc-sys-fs-binfmt_misc.automount      static

dev-hugepages.mount                    static

dev-mqueue.mount                       static

proc-sys-fs-binfmt_misc.mount          static

sys-fs-fuse-connections.mount          static

sys-kernel-config.mount                static

sys-kernel-debug.mount                 static

tmp.mount                              disabled

brandbot.path                          disabled

systemd-ask-password-console.path      static

systemd-ask-password-plymouth.path     static

systemd-ask-password-wall.path         static

session-2.scope                        static

session-29.scope                       static

session-30.scope                       static

session-9.scope                        static

acpid.service                          enabled

arp-ethers.service                     disabled

atd.service                            disabled

auditd.service                         enabled

autovt@.service                        disabled

brandbot.service                       static

cloud-config.service                   enabled

cloud-final.service                    enabled

cloud-init-local.service               enabled

cloud-init.service                     enabled

...



리스닝하는 소켓 타입의 systemctl로 사용할 수 있는 시스템 서비스 목록을 본다.


$ systemctl list-sockets

LISTEN                          UNIT                         ACTIVATES

/dev/initctl                    systemd-initctl.socket       systemd-initctl.service

/dev/log                        systemd-journald.socket      systemd-journald.service

/run/systemd/journal/socket     systemd-journald.socket      systemd-journald.service

/run/systemd/journal/stdout     systemd-journald.socket      systemd-journald.service

/run/systemd/shutdownd          systemd-shutdownd.socket     systemd-shutdownd.service

/run/udev/control               systemd-udevd-control.socket systemd-udevd.service

/var/run/dbus/system_bus_socket dbus.socket                  dbus.service

kobject-uevent 1                systemd-udevd-kernel.socket  systemd-udevd.service


8 sockets listed.

Pass --all to see loaded but inactive sockets, too.




사용할 수 있는 모든 유닛 타입은 다음과 같다.


$ systemctl -t help

Available unit types:

service

socket

target

device

mount

automount

snapshot

timer

swap

path

slice

scope



특정 서비스의 dependency 유닛을 보려면 다음과 같은 커맨드를 사용한다.



$ systemctl list-dependencies crond.service

crond.service

├─system.slice

└─basic.target

  ├─microcode.service

  ├─rhel-autorelabel-mark.service

  ├─rhel-autorelabel.service

  ├─rhel-configure.service

  ├─rhel-dmesg.service

  ├─rhel-loadmodules.service

  ├─paths.target

  ├─slices.target

  │ ├─-.slice

  │ └─system.slice

  ├─sockets.target

  │ ├─dbus.socket

  │ ├─rsyncd.socket

  │ ├─systemd-initctl.socket

  │ ├─systemd-journald.socket

  │ ├─systemd-shutdownd.socket

  │ ├─systemd-udevd-control.socket

  │ └─systemd-udevd-kernel.socket

  ├─sysinit.target

  │ ├─dev-hugepages.mount

  │ ├─dev-mqueue.mount

  │ ├─kmod-static-nodes.service

  │ ├─plymouth-read-write.service

  │ ├─plymouth-start.service

  │ ├─proc-sys-fs-binfmt_misc.automount

  │ ├─sys-fs-fuse-connections.mount

  │ ├─sys-kernel-config.mount

  │ ├─sys-kernel-debug.mount

  │ ├─systemd-ask-password-console.path

  │ ├─systemd-binfmt.service

  │ ├─systemd-journal-flush.service

  │ ├─systemd-journald.service

  │ ├─systemd-modules-load.service

  │ ├─systemd-random-seed.service

  │ ├─systemd-sysctl.service

  │ ├─systemd-tmpfiles-setup-dev.service

  │ ├─systemd-tmpfiles-setup.service

  │ ├─systemd-udev-trigger.service

  │ ├─systemd-udevd.service

  │ ├─systemd-update-utmp.service

  │ ├─systemd-vconsole-setup.service

  │ ├─cryptsetup.target

  │ ├─local-fs.target

  │ │ ├─-.mount

  │ │ ├─rhel-import-state.service

  │ │ ├─rhel-readonly.service

  │ │ ├─systemd-fsck-root.service

  │ │ └─systemd-remount-fs.service

  │ └─swap.target

  │   └─swap-swapfile1.swap

  └─timers.target

    └─systemd-tmpfiles-clean.timer





'unix and linux' 카테고리의 다른 글

[python] carriage return 이슈  (0) 2016.05.27
dstat 툴  (0) 2016.05.23
[centos 7] realpath 명령어  (0) 2016.05.03
센트OS 7 다운로드 URL 설명  (0) 2016.05.02
setuid 동작 결과를 ps로 확인하기(ruser, euser)  (0) 2016.04.28
Posted by '김용환'
,




인터넷 찾아보니. 직접 그림을 그려서 뽐내는(?) 분들이 많이 계시네요. 우와 하는 찬탄사가...


http://www.deviantart.com/ 에서 fan art 또는 tradition art를 browse 해보시면 됩니다.


http://www.deviantart.com/browse/all/traditional/

http://www.deviantart.com/browse/all/traditional/drawings/technical/?order=67108864





좋은 분


http://frompencil2paper.deviantart.com/gallery/







Posted by '김용환'
,


다음 그림은 파티션 범위를 이해하게 하는 그림으로서 전체 윈도우 표현식이다.





* current row : 현재 로우


* X PRECEDING 또는 Y FOLLOWING : 현재 로우(currow row)의 앞/뒤로 N 개의 로우를 의미한다.


* UNBOUNDED PRECEDING : 시작 지점을 알리며, 해당 윈도우는 파티션의 1 번째 로우이다.


* UNBOUNDED FOLLOWING : 마지막 지점을 알린다. 해당 윈도우는 파티션의 마지막 로우이다.


UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: 테이블의 모든 로우를 의미하며, 1 번째와 마지막 로우를 각각 가르킨다.


* BETWEEN … AND : 윈도우의 시작 지점과 마지막 지점을 명세하기 위해 BETWEEN...AND 절을 사용한다. AND 앞의 표현식은 시작 지점을 정의하고, AND 뒤의 표현식은 마지막 지점을 정의한다. ROWS N PRECEDING 또는 ROWS UNBOUNDED PRECEDING와 같이 BETWEEN...AND 절을 생략한다면, 하이브는 기본적으로 윈도우의 처음 또는 N 번째 앞 부분을 시작 지점으로, 현재 로우를 마지막 지점으로 간주한다.



'hadoop' 카테고리의 다른 글

hadoop client 설치 URL  (0) 2016.10.24
hive 와 hadoop 버전 확인하기  (0) 2016.10.21
[hive] 정렬 키워드 - order by, sort by, cluster by, distribute by  (0) 2016.05.11
[hive] collect_set  (0) 2016.04.30
[hadoop] getmerge 명령어  (0) 2016.04.21
Posted by '김용환'
,




https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy



하이브에서 사용되는 정렬 키워드를 소개한다.


* ORDER BY (ASC|DESC): RDMBS의 ORDER BY 문과 비슷하다. ORDER BY 문을 실행 시, 하나의 리듀서만 사용해 전역 정렬을 수행하면, 리턴 시간이 더 소요된다. ORDER BY 뒤에 LIMIT 사용하는 것을 강력 추천한다. 그래서, hive.mapred.mode = strict (hive.mapred.mode= nonstrict은 기본값이다.)로 설정하고 LIMIT을 명세하지 않으면, 에러가 발생한다. 



jdbc:hive2://> SELECT name FROM employee ORDER BY NAME DESC;

+----------+

|   name   |

+----------+

| Will     |

| Shelley  |

| Michael  |

| Lucy     |

+----------+



* SORT BY (ASC|DESC): 어떤 레코드의 컬럼으로 정렬할지 가리킨다. 데이터를 리듀서에 보내기 전에 정렬을 완료한다는 것을 의미한다. mapred.reduce.tasks=1을 설정하지 않는다면, SORT BY 문은 전역으로 정렬을 수행하지 않고, 각 리듀서에서 내부적으로 정렬된 데이터인지 확인한다. 이 경우에 ORDER BY 결과와 동일하다. 


--2 개의 리듀서를 사용하면 리듀서마다 정렬(sorting)하기 때문에 정렬 결과가 다르다.

jdbc:hive2://> SET mapred.reduce.tasks = 2;

No rows affected (0.001 seconds)


jdbc:hive2://> SELECT name FROM employee SORT BY NAME DESC;

+----------+

|   name   |

+----------+

| Shelley  |

| Michael  |

| Lucy     |

| Will     |

+----------+

4 rows selected (54.386 seconds)


--리듀서 한 개만 사용하면 order by 와 동일한 효과를 제공한다.

jdbc:hive2://> SET mapred.reduce.tasks = 1;

No rows affected (0.002 seconds)


jdbc:hive2://> SELECT name FROM employee SORT BY NAME DESC;

+----------+

|   name   |

+----------+

| Will     |

| Shelley  |

| Michael  |

| Lucy     |

+----------+

4 rows selected (46.03 seconds)



* DISTRIBUTE BY:  컬럼값이 일치하는 로우는 동일한 리듀서로 파티션 된다. 하나의 리듀서만 사용하면, 리듀스는 정렬된 입력을 보장하지 않는다. 매퍼 결과를 분배하기 위해 어느 리듀서로 결정할지 여부의 관점에서 보면, DISTRIBUTE BY는 RDBMS의 GROUP BY와 비슷하다. SORT BY를 사용할 때, SORT BY 앞에 DISTRIBUTE BY를 명세해야 한다. 그리고, 분배하기 위해 사용된 컬럼은 SELECT 뒤에 컬럼 이름이 나타나야 한다. 



- SQL의 GROUP BY와 같은 형태이기 때문에 select 뒤에 컬럼 이름이 나와야 한다.

jdbc:hive2://> SELECT name 

. . . . . . .> FROM employee_hr DISTRIBUTE BY employee_id; 

Error: Error while compiling statement: FAILED: SemanticException [Error 10004]: Line 1:44 Invalid table alias or column reference 'employee_id': (possible column names are: name) (state=42000,code=10004)


jdbc:hive2://> SELECT name, employee_id 

. . . . . . .> FROM employee_hr DISTRIBUTE BY employee_id; 

+----------+--------------+

|   name   | employee_id  |

+----------+--------------+

| Lucy     | 103          |

| Steven   | 102          |

| Will     | 101          |

| Michael  | 100          |

+----------+--------------+

4 rows selected (38.92 seconds)


--SORT BY로 사용하기 

jdbc:hive2://> SELECT name, employee_id  

. . . . . . .> FROM employee_hr 

. . . . . . .> DISTRIBUTE BY employee_id SORT BY name; 

+----------+--------------+

|   name   | employee_id  |

+----------+--------------+

| Lucy     | 103          |

| Michael  | 100          |

| Steven   | 102          |

| Will     | 101          |

+----------+--------------+

4 rows selected (38.01 seconds)



* CLUSTER BY: 동일한 그룹의 컬럼에 대해 DISTRIBUTE BY와 SORT BY 명령을 동시에 수행하는 명령어다. 그리고 내부적으로 각 리듀서에서 정렬된다. CLUSTER BY 문은 아직 ASC 또는 DESC를 지원하지 않는다. 전역으로 정렬되는 ORDER BY와 비교해, CLUSTER BY 명령은 각 분배된 그룹에서 정렬이 이루어진다. 전역 정렬을 실행할 때 사용할 수 있는 모든 리듀서를 작동시키려면, CLUSTER BY를 먼저 사용하고 뒤에 ORDER BY를 사용한다. 



jdbc:hive2://> SELECT name, employee_id 

. . . . . . .> FROM employee_hr CLUSTER BY name;  

+----------+--------------+

|   name   | employee_id  |

+----------+--------------+

| Lucy     | 103          |

| Michael  | 100          |

| Steven   | 102          |

| Will     | 101          |

+----------+--------------+

4 rows selected (39.791 seconds)



'hadoop' 카테고리의 다른 글

hive 와 hadoop 버전 확인하기  (0) 2016.10.21
[hive] hive의 윈도우 표현식(파티션 범위)  (0) 2016.05.11
[hive] collect_set  (0) 2016.04.30
[hadoop] getmerge 명령어  (0) 2016.04.21
[hive] count와 distinct 이슈  (0) 2016.04.20
Posted by '김용환'
,