얼마 전에 이에 관한 내용을 읽은 것 같은데 어떻게 되었는지 기억이 나지 않습니다. 기본적으로 /etc/init.d
부팅 시 자동으로 시작하려는 서비스가 있습니다 . 스크립트를 디렉토리에 심볼릭 링크하는 것과 관련이 있었던 것으로 기억 /etc/rc.d
하지만 지금은 기억이 나지 않습니다. 이 명령은 무엇입니까?
저는 Fedora/CentOS 파생 제품을 사용하고 있다고 생각합니다.
답변1
언급한 대로 Red Hat 기반 시스템을 사용하는 경우 다음을 수행할 수 있습니다.
- 스크립트를 생성하여 여기에 넣습니다
/etc/init.d
(예/etc/init.d/myscript
: ). 스크립트의 형식은 다음과 같아야 합니다.
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
형식은 매우 표준적이므로 에서 사용할 수 있습니다 . 그런 다음 다음 과 /etc/init.d
같은 스크립트를 사용할 수 있습니다 . 매뉴얼 페이지에서는 스크립트 제목을 설명합니다./etc/init.d/myscript start
chkconfig myscript start
ckconfig
> This says that the script should be started in levels 2, 3, 4, and
> 5, that its start priority should be 20, and that its stop priority
> should be 80.
다음에 정의된 도우미 함수의 시작, 중지 및 상태 코드 사용 예/etc/init.d/functions
스크립트 활성화
$ chkconfig --add myscript $ chkconfig --level 2345 myscript on
스크립트가 실제로 활성화되어 있는지 확인하십시오. "on"을 선택한 레벨이 표시되어야 합니다.
$ chkconfig --list | grep myscript
답변2
머신이 일반적으로 부팅되는 런레벨을 테스트합니다.
runlevel
일반적으로 이는 5 또는 2입니다. 다양한 규칙이 있지만 제가 아는 한 실제로 명확한 것은 없습니다. Ubuntu는 2를 사용하지만 이전 배포판은 항상 사용했습니다.
- 단일 사용자(수퍼유저) 1명
- 2명의 다중 사용자
- 3.다중 사용자 + 네트워크
- 4 미사용/사용자 정의 가능
- 다중 사용자 5명, 네트워크 +X11
그런 다음 초기화 스크립트에서 심볼릭 링크를 만듭니다 /etc/init.d/foobar
./etc/rc2.d/SXYfoobar
S는 "이 실행 수준(여기서는 2)에서 이 스크립트를 시작합니다"를 의미합니다. XY는 스크립트가 시작되는 순서와 관련된 두 자리 십진수입니다.
이전에 실행되는 S45barfoo 스크립트에 의존하고 S55foofoo가 스크립트에 의존하는 경우 45에서 55 사이의 xy를 선택할 수 있습니다. 동일한 번호의 경우 부팅 순서가 정의되지 않습니다.
동시에 Ubuntu는 upstart
.
참고: 항상 연결되어 있지는 않습니다 /etc/rcX.d
. 때로는 연결되거나 /etc/init/rcX.d
유사하지만 /etc 아래 어딘가에서 쉽게 찾을 수 있어야 합니다.
시작 스크립트 끝에서 무언가를 시작하려면 /etc/rc.local
파일을 찾아야 하지만 이미 실행 중인 X11에 의존하는 경우 데스크탑 환경의 자동 시작 옵션을 찾거나 /etc/X11/Xsession.d/
다음과 유사한 패턴을 사용할 수 있습니다. 위에서 설명한 것 중 하나입니다.
제대로 작동하기 위해 네트워크에 의존하는 경우 마운트된 장치(예: 외부 USB 드라이브)에 대한 별도의 디렉터리(if-up.d)가 있습니다 /etc/udev/rules.d/
.
답변3
/etc/fstab
이 답변에서는 Ubuntu 시스템의 서비스 스크립트를 통해 정의된 Windows 공유(CIFS)를 마운트한다고 가정해 보겠습니다 . 먼저 mount -a -t cifs
아래 /etc/init.d/mountcifs
내용으로 항목을 만듭니다.
#! /bin/sh
### BEGIN INIT INFO
# Provides: mountcifs
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Mounts / Umounts Window Shares (CIFS)
# Description: Mounts / Umounts Window Shares (CIFS)
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
case "$1" in
start)
mount -a -t cifs
;;
stop)
umount -a -t cifs
;;
restart|reload|force-reload)
umount -a -t cifs
mount -a -t cifs
;;
*)
# echo "Usage: $0 start|stop" >&2
# exit 3
;;
esac
/etc/init.d/mountcifs
사용할 수 있는지 확인하십시오 chmod 755 /etc/init.d/mountcifs
.
# Default-Start: 2 3 4 5
댓글에 참고해주세요 . 이 설명 덕분에 다음 명령을 사용하여 Ubuntu에 및 폴더에 심볼릭 링크를 생성하도록 지시할 /etc/rc2.d
수 /etc/rc3.d
있습니다 /etc/rc4.d
./etcrc5.d
sudo update-rc.d mountcifs defaults
그런 다음 다음과 같이 스크립트를 테스트할 수 있습니다.
sudo service start mountcifs
df -h # should see Windows Shares
sudo service stop mountcifs
df -h # all Windows Shares should be gone
sudo service start mountcifs
df -h # all Windows Shares should be back
Windows 공유는 재부팅 시 자동으로 마운트되어야 합니다.
답변4
Naftuli Tzvi Kay가 위에서 Debian에 대해 물었던 것처럼: Debian 6부터 스크립트에는 종속성과 기능을 나타내는 LSB(Linux Standard Library) 헤더가 포함되어야 합니다(데비안 위키 페이지를 참조하세요).
LSB 헤더가 있는 경우 다음을 insserv
사용하여 부팅 프로세스에 스크립트를 포함할 수 있습니다.다른 데비안 위키 페이지 보기).