리눅스에서는 '부팅 시' 자동으로 스크립트를 실행시키는데 몇 가지 방법이 있다.
1. 크론탭 리부트(@reboot)
크론탭에서 '부팅 시' 스크립트를 실행하도록 할 수 있다.
crontab -e 로 크론탭 페이지를 연다.
crontab @reboot /usr/bin/logger '[init] crontab'
Bash
복사
자신의 계정에 기입하면 자신의 계정 권한으로, 루트 계정에서 기입하면 루트 계정으로 실행된다.
2. rc.local 파일 스크립트
rc.local 파일은 부팅 시 실행해주는 스크립트이다.
vi /etc/rc.loacl 로 파일을 연다.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
/usr/bin/logger '[init] rc.local'
exit 0
Bash
복사
기입만 해주면 자동으로 실행을 해준다. 종료시 반드시 0을 리턴하라고 되어 있다. 애러가 날 시에는 syslog에 rc.local이름으로 로그가 기재된다.
3. init.d 서비스
rc.local보다 조금 더 묵직하게 '서비스 스크립트'를 작성하여 데몬으로 실행시키는 것이 가능하다. 이 경우에는 부팅시 자동 실행 외에 service 명령어를 통해 서비스 중지, 재기동 등도 가능하다. 이는 완전한 의미에서의 데몬(daemon) 서비스가 되겠다.
#!/bin/sh
### BEGIN INIT INFO
# Provides: test_service
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Sample service init.d script
# Description: Sample service init.d script
### END INIT INFO
/usr/bin/logger '[init] init.d'
exit 0
Bash
복사
그렇다면, 이 각각의 실행 명령에 대한 실행 시점 및 순서는 어떻게 될까? 위의 내용을 기입 후 재부팅 후에 로그를 조회하면 아래와 같은 결과를 얻을 수 있다.
pi@raspberrypi:~ $ tail -1000 /var/log/syslog | grep "\[init\]"
May 12 21:10:54 raspberrypi root: [init] init.d
May 12 21:10:54 raspberrypi CRON[421]: (pi) CMD (/usr/bin/logger '[init] crontab')
May 12 21:10:54 raspberrypi pi: [init] crontab
May 12 21:10:55 raspberrypi root: [init] rc.local
Bash
복사
두 번째 로그는 해당 스크립트를 실행시키겠다는 로그이고, 따라오는 로그가 스크립트 실행에 대한 결과이다.
실행 순서는 데몬 서비스(init.d) →크론탭(crontab) → rc.local 의 순서임을 알 수 있다.
해당 순서를 참고하여 자신에게 필요한 순서에 실행을 시킬 수 있도록 하자.
추가: 오늘날에는 rc.local 파일을 사용하지 않기를 권하고 있다. 해당 내용은 아래 링크를 참고하자.