ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ubuntu] 부팅 시 자동 실행
    Study/Linux 2017. 8. 24. 10:04

    ### ubuntu에서 프로그램 자동실행 방법 ###


    1. rc.local에 script 추가


    • # sudo gedit rc.local (or sudo vi rc.local)
    • 'exit 0' 윗줄에 프로그램 실행 script 추가

    ...


    echo "Start my program"

    cd /home/user/dev

    sudo ./program


    exit 0


    이 방법은 rc.local이 호출된 이후 프로그램 종료 전까지 root 계정에서 다른 작업이 불가함

    다른 계정으로 로그인 해도 느리게 동작하는 경우가 있음


    2. process를 생성하여 rcN.d에 연결


    • Shell script 파일을 작성하여 /etc/init.d에 추가 (ref. /etc/init.d/skeleton)
      • INIT INFO 작성시 참고 사항: 아래 두 조건에 따라 rcN.d에 연결될때 번호나 위치가 달라짐
      • Required-Start/Stop - Process가 실행/종료되기 이전에 준비되어야 할 조건들 나열
      • Default-Start/Stop - Process가 실행/종료되는 run level 나열
    #! /bin/sh

    ### BEGIN INIT INFO
    # Provides:          myservice
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Example initscript
    # Description:       This file should be used to construct scripts to be
    #                    placed in /etc/init.d.
    ### END INIT INFO

    case "$1" in
      start)
      start_script
    esac
    ;;
      stop)
    stop_script
    esac
    ;;
      *)
    echo "Usage: myservice {start|stop}" >&2
    exit 3
    ;;
    esac

    :
    • service script를 rcN.d에 연결
      • case 1) # sudo update-rc.d myservice defaults
        • defaults 옵션은 INIT INFO에 작성한 조건에 따라 myservice의 run level과 실행 순서를 결정함
      • case 2) # sudo update-rc.d myservice start 20 2 3 4 5
        • 20번 순서로 2, 3, 4, 5의 run level에서 수행
        • /etc/rc2.d, /etc/rc3.d, /etc/rc4.d, /etc/rc5.d에 S99myservice 연결파일 생성됨
      • 삭제시: #sudo update-rc.d -f myservice remove
      • usage [update-rc.d] : https://www.debuntu.org/how-to-managing-services-with-update-rc-d/

    위 방법으로 rcN.d에 연결파일이 생성되어도 실제 부팅시에 실행되지 않는 경우 발생함

    3. SysV Runlevel Config

    2번에서 rcN.d에 연결파일이 생성되어 있더라도 run level이 제대로 설정되지 않는 경우가 발생하며,
    이럴 때는 process 수행이 잘 안되는 경우가 있음
    • 2번 수행 후 run level 편집
    • case 1) # sudo sysv-rc-conf
      • 없을 경우:  # sudo apt-get install sysv-rc-conf
      • 등록한 process의 필요한 run level 칸이 X가 채워지도록하고 종료하면 끝
    • case 2) # sudo sysv-rc-conf --level 2345 myservice on
      • usage [sysv-rc-conf] : http://sysv-rc-conf.sourceforge.net/

    process script가 단순 shell script인 경우 2번 방법으로 프로세스 실행이 잘 안되는 경우가 많았으나,
    3번 방법으로 run level을 편집해 주면 실행이 잘되었음.


Designed by Tistory.