OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] init 프로세스 - init, upstart

주누다 2015. 4. 16. 00:46
반응형

init 프로세스

- init 프로세스는 PID가 1번인 프로세스로 모든 프로세스의 조상 역할

- init 프로세스는  부팅 과정에서 커널의 의해 실행

- 각종 서비스를 제공하는 다른 프로세스를 동작 시키는 역할

- 전통적인 init 프로세스는 스크립트를 순차적으로 실행하여 다른 프로세스들을 동작

- 최근 우분투를 비롯해 유닉스나 리눅스 대부분이

 스크립트를 순차적으로 실행하는 기존의 방식에서

 이벤트 기반으로 동작하는 방식으로 init 을 대체

- 우분투는 자체적으로 개발한 'upstart' 를 init 대신 사용

- 기존의 유닉스 및 리눅스 환경과의 호환을 위해 실행 파일 이름은 init을 유지

- 'man upstart' 명령을 통해서 확인 가능

- init 동작 방식이 바뀜에 따라 전통적으로 init 프로세스와 관련된 설정 파일이었던 '/etc/inittab' 파일은 우분투에서 사라짐.




init 프로세스와 스크립트 파일

- 기존의 'init'과 새로운 'upstart' 는 모두 프로세스를 실행하거나 종료하기 위해 스크립트 파일을 사용

- 우분투에는 'upstart' 사용하는 스크립트와 함께 기존의 방식으로 동작하는 'init' 스크립트도 공존

- 설치하는 서비스에 따라 'upstart'용 스크립트가 설치되기도 하고 기존의 'init'용 스크립트가 설치되기도 함

- '/etc/init' 디렉터리와 '/etc/init.d' 디렉터리에 같은 서비스에 대한 파일이 있다면

 '/etc/init' 디렉터리의 스크립트 파일이 우선적으로 적용

1) 'upstart'가 사용하는 작업 파일

- 'upstart' 와 관련된 스크립트 파일은 '/etc/init' 디렉터리에 '작업명.conf' 파일로 구성

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ls /etc/init
acpid.conf                   mountkernfs.sh.conf
alsa-restore.conf            mountnfs-bootclean.sh.conf
alsa-state.conf              mountnfs.sh.conf
alsa-store.conf              mtab.sh.conf
anacron.conf                 network-interface-container.conf
apport.conf                  network-interface-security.conf
atd.conf                     network-interface.conf
avahi-cups-reload.conf       network-manager.conf
avahi-daemon.conf            networking.conf
bluetooth.conf               passwd.conf
bootmisc.sh.conf             plymouth-log.conf
checkfs.sh.conf              plymouth-ready.conf
checkroot-bootclean.sh.conf  plymouth-shutdown.conf
checkroot.sh.conf            plymouth-splash.conf
click-apparmor.conf          plymouth-stop.conf
click-system-hooks.conf      plymouth-upstart-bridge.conf
console-font.conf            plymouth.conf
console-setup.conf           procps.conf
console.conf                 pulseaudio.conf
container-detect.conf        rc-sysinit.conf
control-alt-delete.conf      rc.conf
cron.conf                    rcS.conf
cups-browsed.conf            resolvconf.conf
cups.conf                    rfkill-restore.conf
dbus.conf                    rfkill-store.conf
dmesg.conf                   rsyslog.conf
failsafe-x.conf              setvtrgb.conf
failsafe.conf                shutdown.conf
flush-early-job-log.conf     startpar-bridge.conf
friendly-recovery.conf       systemd-logind.conf
gpu-manager.conf             tty1.conf
hostname.conf                tty2.conf
hwclock-save.conf            tty3.conf
hwclock.conf                 tty4.conf
irqbalance.conf              tty5.conf
kmod.conf                    tty6.conf
lightdm.conf                 udev-fallback-graphics.conf
modemmanager.conf            udev-finish.conf
mountall-bootclean.sh.conf   udev.conf
mountall-net.conf            udevmonitor.conf
mountall-reboot.conf         udevtrigger.conf
mountall-shell.conf          ufw.conf
mountall.conf                upstart-file-bridge.conf
mountall.sh.conf             upstart-socket-bridge.conf
mountdevsubfs.sh.conf        upstart-udev-bridge.conf
mounted-debugfs.conf         ureadahead-other.conf
mounted-dev.conf             ureadahead.conf
mounted-proc.conf            usb-modeswitch-upstart.conf
mounted-run.conf             wait-for-state.conf
mounted-tmp.conf             whoopsie.conf
mounted-var.conf
sjw-lenovo@sjwlenovo-Lenovo-U310:~$

===================================================================



2) 기존 init용 스크립트 파일

- 기존의 'init' 가 사용하는 스크립트 파일은 '/etc/init.d' 디렉터리에 있음

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ls /etc/init.d
README         cron               killprocs   rc.local    speech-dispatcher
acpid          cups               kmod        rcS         sudo
anacron        cups-browsed       lightdm     reboot      udev
apparmor       dbus               networking  resolvconf  umountfs
apport         dns-clean          ondemand    rsync       umountnfs.sh
atd            friendly-recovery  postfix     rsyslog     umountroot
avahi-daemon   grub-common        pppd-dns    saned       unattended-upgrades
bluetooth      halt               procps      sendsigs    urandom
brltty         irqbalance         pulseaudio  single      x11-common
console-setup  kerneloops         rc          skeleton
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================

- '/etc/init' 디렉터리와 '/etc/init.d' 디렉터리에 같은 서비스와 관련된 스크립트들이 있음

- 이와 같이 'upstart' 스크립트가 있는 경우, '/etc/init.d' 디렉터리에 있는 스크립트 중 일부는

 '/lib/init/upstart-job' 에 대한 심벌릭 링크

- 'upstart-job'  은 해당 서비스의 upstart 스크립트를 찾아서 실행시킴.

- 우분투에서는 아직 모든 서비스가 upstart로 바뀌지 않았기 때문에 일어나는 현상이라고 보면 됨

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ls -l /etc/init.d | grep upstart
lrwxrwxrwx 1 root root   21  3월 25 23:58 cron -> /lib/init/upstart-job
lrwxrwxrwx 1 root root   21  3월 25 23:58 friendly-recovery -> /lib/init/upstart-job
sjw-lenovo@sjwlenovo-Lenovo-U310:~$

===================================================================




init 스크립트 시작하고 정지하기(upstart)

- upstart 스크립트와 기존의 init 스크립트를 시작하고 정지하는 방법은 다름

1) upstart 스크립트 시작하고 정지하기

- 'upstart' 에서는 서비스를 제공하는 프로세스를 작업이라고 함.

- 'upstart' 스크립트는 다음과 같은 두 가지 방법으로 작업을 시작하거나 정지.

 * initctl [start  | stop | restart | reload | status] 작업명

 * [start | stop | restart | reload | status] 작업명

- 두 가지 모두 init 명령을 사용.

- 'start', 'stop', 'restart', 'reload', 'status' 명령이 모두 initctl 명령에 대한 심벌릭 링크이기 때문.

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ls -l /sbin | grep initctl
-rwxr-xr-x 1 root root    193512  4월 12  2014 initctl
lrwxrwxrwx 1 root root         7  3월 25 23:59 reload -> initctl
lrwxrwxrwx 1 root root         7  3월 25 23:59 restart -> initctl
lrwxrwxrwx 1 root root         7  3월 25 23:59 start -> initctl
lrwxrwxrwx 1 root root         7  3월 25 23:59 status -> initctl
lrwxrwxrwx 1 root root         7  3월 25 23:59 stop -> initctl
sjw-lenovo@sjwlenovo-Lenovo-U310:~$
===================================================================


initctl

- 'upstart' 스크립트를 실행하기 위한 명령

- 서브 명령에 따라 서비스를 시작하거나 정지하는 동작을 수행

- 기능 : upstart init 데몬을 제어

- 형식 : initctl [서브 명령] 작업명

- 서브 명령 :

 * 'start' : 작업을 시작

 * 'stop' : 작업을 정지

 * 'reload' : 작업에 SIGHUP 시그널을 보냄

 * 'restart' ; 작업을 다시 시작

 * 'status' : 작업 상태를 출력

 * 'list' : 알려진 작업의 목록을 현재 상태와 함께 출력

- 사용 예 : initctl start cups, initctl stop cups, initctl list

2) 전체 작업 목록 출력

- 'initctl list' 명령을 실행하면 전체 작업 목록과 현재 상태를 출력

- 현재 동작 중인 작업은 PID도 출력

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ initctl list
gnome-keyring-gpg stop/waiting
indicator-application start/running, process 2164
unicast-local-avahi stop/waiting
update-notifier-crash stop/waiting
application stop/waiting
click-user-hooks stop/waiting
update-notifier-hp-firmware stop/waiting
xsession-init stop/waiting
application-legacy stop/waiting
dbus start/running, process 1959
update-notifier-cds stop/waiting
application-failed stop/waiting
gnome-keyring-ssh stop/waiting
gnome-session (Unity) start/running, process 2040
ssh-agent stop/waiting
unity-voice-service stop/waiting
unity7 stop/waiting
upstart-dbus-session-bridge start/running, process 2002
indicator-messages start/running, process 2129
logrotate stop/waiting
indicator-bluetooth start/running, process 2131
unity-panel-service start/running, process 2045
hud start/running, process 2037
im-config start/running
unity-gtk-module stop/waiting
session-migration stop/waiting
upstart-dbus-system-bridge start/running, process 2006
at-spi2-registryd start/running, process 2039
indicator-power start/running, process 2136
untrusted-helper-type-end stop/waiting
update-notifier-release stop/waiting
indicator-datetime start/running, process 2137
unity-settings-daemon start/running, process 2033
indicator-sound start/running, process 2141
untrusted-helper stop/waiting
upstart-file-bridge start/running, process 2004
gnome-keyring stop/waiting
window-stack-bridge start/running, process 1981
application-click stop/waiting
indicator-printers start/running, process 2144
re-exec stop/waiting
upstart-event-bridge start/running, process 1976
unity-panel-service-lockscreen stop/waiting
indicator-session start/running, process 2162
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================



3) 작업 상태 보기

- 'initctl status' 명령을 사용하면 작업 상태를 확인

- 'status' 명령을 쓰는 것과 동일

- 'start/running' 작업 중 하나를 선택했을시

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ initctl status indicator-session
indicator-session start/running, process 2162
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================



4) 작업 종료하기

- 동작 중인 작업을 종료 하려면 'initctl stop' 또는 'stop' 명령을 사용

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo initctl stop indicator-session
indicator-session stop/waiting
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================



5) 작업 시작하기

- 'initctl start' 나 그냥 'start'  명령을 사용하여 작업을 시작

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo initctl start tty6
tty6 start/running, process 6954
sjw-lenovo@sjwlenovo-Lenovo-U310:~$
===================================================================


6) 작업 다시 시작하기

- 'initctl restart' 나 'restart' 명령을 사용하면 작업을 다시 시작할 수 있음.

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo initctl start tty6
tty6 start/running, process 6954
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo initctl restart tty6
tty6 start/running, process 7051
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================





init 스크립트 시작하고 정지하기(기존 init) 

- 기존의 init 스크립트는 두 가지 방법으로 실행 

 * service 스크립트명 [start | stop | restart | status]

 * /etc/init.d/스크립트명 [start | stop | restart | status]

service

- 기능 : 시스템 V init 스크립트를 실행

- 형식 : service 스크립트 [서브 명령]

- 서브 명령 :

 * 'start' : 스크립트에게 지정한 start  부분을 실행

 * 'stop' : 스크립트에 지정한 stop 부분을 실행

 * 'reload' : 스크립트에 지정한 reload 부분을 실행

 * 'restart' : 스크립트에 지정한 restart 부분을 실행

 * 'status' : 스크립트에 지정한 status 부분을 실행

- 사용 예 : service cups start, service cups stop

- 'service' 명령에서 'start', 'stop', 'restart' 등 서브 명령은 해당 스크립트에 지정된 값에 따라 적용

- 예를 들어 '/etc/init.d/single' 스크립트를 보면 'start' 와 'stop'만 실행하고 나머지 서브 명령은 오류 처리

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ cat /etc/init.d/single
#! /bin/sh
### BEGIN INIT INFO
# Provides:          single
# Required-Start:    $local_fs $all killprocs
# Required-Stop:
# Default-Start:     1
# Default-Stop:
# Short-Description: executed by init(8) upon entering runlevel 1 (single).
### END INIT INFO

PATH=/sbin:/bin

. /lib/lsb/init-functions

do_start () {
    log_action_msg "Will now switch to single-user mode"
    exec init -t1 S
}

case "$1" in
  start)
    do_start
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    # No-op
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac
sjw-lenovo@sjwlenovo-Lenovo-U310:~$
===================================================================


1) 서비스 상태 보기

- 'service 스크립트 status' 명령을 사용하면 서비스의 상태를 확인

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo service cups status
[sudo] password for sjw-lenovo:
cups start/running, process 6695
sjw-lenovo@sjwlenovo-Lenovo-U310:~$

===================================================================



2) 서비스 종료하기

- 동작 중인 서비를 종료 하려면 'service 스크립트 stop' 명령을 사용

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo service cups stop
[sudo] password for sjw-lenovo:
cups stop/waiting
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================



3) 서비스 시작하기

- 'service 스크립트 start' 명령을 사용하여 서비스를 시작

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo service cups start
cups start/running, process 12779
sjw-lenovo@sjwlenovo-Lenovo-U310:~$

===================================================================



4) 서비스 다시 시작하기

- 'service 스크립트 restart' 명령을 사용하여 서비스를 다시 시작

===================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo service cups restart
cups stop/waiting
cups start/running, process 12802
sjw-lenovo@sjwlenovo-Lenovo-U310:~$

===================================================================





반응형