시작할 때 쉘 스크립트를 실행하는 방법?


13

서버를 시작하는 스크립트를 만들었습니다 (첫 번째 질문). 이제 시스템 부팅에서 실행하고 정의 된 서버를 시작하려고합니다. 이 작업을 수행하려면 어떻게해야합니까?

내 연구 결과는이 파일을 해당 /etc/init.d위치 에 넣고 시스템 부팅시 실행됩니다. 그러나 나는 스타트 업에 대한 첫 번째 주장이 어떻게 될지 이해할 수 없다 start. 이로 미리 정의 start되어 $1있습니까? startall스크립트에서 모든 서버를 시작 하는 사례 를 원한다면 관리 할 수있는 옵션은 무엇입니까?

내 스크립트는 다음과 같습니다

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

나는 이것이 오래되었다는 것을 알고 있지만 쉘은 '#! / bin / bash'가 아닌 '#! / bin / sh'이어야합니다. (예 : / usr / lib를 마운트 할 수 없음)
Rich Homolka

답변:


19

/etc/init.d실행 가능한 스크립트가 나타나는 스크립트 디렉토리입니다. 그러나 시스템이 시작된 후 특정 순서로 스크립트를 실행하려면 /etc/rc#.d디렉토리 에 파일을 추가해야합니다 . 여기에 나타나는 항목은 시스템에 어떤 순서로 어떤 실행 레벨 스크립트를 실행해야하는지 알려줍니다 /etc/init.d. rc 다음의 숫자는이 차트에 따라 머신이 실행중인 실행 레벨을 나타냅니다.

http://en.wikipedia.org/wiki/Runlevel

당신이 가지고 있다면 :

/etc/init.d/importantscript

그런 다음 (빈) 파일이 필요합니다.

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

S는 시작을, K는 킬을 의미합니다. 컴퓨터가 시작되면 시스템에 "아, RunLevel 3에서 실행 중입니다. rc3.d로 이동하여 '/etc/init.d'의 스크립트를 실행해야하는 순서와 순서를 확인하십시오." 이 경우 시스템은 'S'를 기준으로 정렬 한 다음 'S'뒤의 숫자를 정렬하고 '/etc/init.d/importantscript start'를 실행합니다. 20은 주문을 목적으로 한 것입니다 ... 스크립트는 'S19'뒤에서 'S21'앞에서 실행됩니다. 다음을 수행하여 이러한 파일을 간단하게 만들 수 있습니다.

sudo touch /etc/rc.d/rc3.d/S20importantscript

여기에 좋은 요약이 있습니다 : http://www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts


"ln -s /etc/init.d/script"를 rcX.d / *에 더 일반적이지 않습니까?
ozma

8

/etc/rc.d/rcN.d/; 에서 파일을 만들 필요는 없으며, --- 만들지 않아야합니다 . 대신해야 할 일은 init 스크립트 읽기에 주석을 달는 것입니다.

# chkconfig NNN A B

여기서 NNN당신은 (예를 들어, 액티브 스크립트를하려는 실행 레벨의 집합입니다 345그것을 실행 수준에서 활성 인 경우 3, 4그리고 5), 및 AB시작을하고 우선 순위를 중지가. 그런 다음 chkconfig --add foo(스크립트 이름이이라고 가정 foo) /etc/rc.d/rcN.d/적절한 이름으로 파일을 만듭니다 .

그런 다음 사용할 수 있습니다 service foo bar보내 bar(예 : 스크립트에 메시지를 start, stop무엇이든 - 당신은 어디 그건 $1에서 온다).


0

$ 1은 스크립트에 전달되는 명령 행 인수이며 시작, 중지 또는 다시 시작 중 하나입니다. openSUSE 에서는 runlevel 편집기를 사용할 때 다른 인수를 스크립트에 전달하는 옵션이 기억 나지 않으므로 이것 만 사용해야한다고 생각합니다.

CentOS를 직접 사용하지는 않지만 어떤 실행 수준에서 시작되는 것을 제어하는 ​​프로그램은 ntsysv 인 것 같습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.