- 작성시간 : 2015/02/08 19:08
- 퍼머링크 : mcchae.egloos.com/11153609
- 덧글수 : 12
4년전인가에 cron 테이블 작업을 돌릴 때
환경 변수 문제가 있어 그것에 관련된 블로그를 포스팅 한 적이 있습니다.
이번에는 CentOS에서 재 이동시 rc.local 에 root 권한으로 스크립트를 기동시킬 때 발생한
시행착오가 있어 공유해 보고자 합니다.
우선 CentOS에서 rc.local은
/etc/rc.d/rc.local 로 되어 있고 이것이 다시 /etc/rc.local 심볼릭 링크를 걸어 놓았습니다.
우선 터미널에서
[root@localhost rc.d]# who -r
run-level 5 2015-01-18 09:44 last=S
와 같이 명령을 내려보면,
현재 사용자의 runlevel이 5 임을 알 수 있습니다.
5는 X윈도우 UI 환경이고,
3은 네트워크 지원되는 터미널 환경입니다.
이렇게 RunLevel에 따라서 /etc/rc.d/에 있는
rc{runlevel}.d (위에서는 rc5.d) 에 가봅니다.
그러면 K{번호}로 시작하는 스크립트와 S{번호}로 시작하는
스크립트가 존재하는데 처음 시스템이 기동하면서
S로시작하는 번호순의 스크립트가 동작합니다.
종료시에는 동일하게 K로 시작하는 스크립트가 실행되구요.
그런데 이 rc.local은 다른 모든 init 스크립트가 실행되고
맨 나중에 호출된다고 합니다.
문제는 이 rc.local 이 기동될 때 디폴트로 root 권한은 아니라는 점입니다.
만약 CentOS (5.11) 에서 rc.local 에 root (또는 원하는 계정) 로 동작시키고 싶은
스크립트가 /opt/bin/myscript.sh 라고 하면
rc.local 에
/opt/bin/myscript.sh &
라고 내용을 넣으면 root 권한으로 실행되지 않습니다.
대신,
su root -c "/opt/bin/myscript.sh &"
라고 해 주어야 합니다.
또한 /opt/bin/myscript.sh 스크립트에
첫 줄이
#!/bin/sh
라고 되어 있었고
환경 변수를 설정한다면,
PATH=$PATH:/opt/bin
export PATH
와 같이 주어야지,
export PATH=$PATH:/opt/bin
라고 주면 환경 변수 설정에 실패합니다.
아니면
첫 줄에
#!/bin/bash
라고 쉘을 지정하면
export PATH=$PATH:/opt/bin
도 잘 지정될 것입니다.
아주 기본적인 것이지만,
리눅스 배포판에 따라서, 또는 버전에 따라서
미묘하게 달라질 수 있으므로
rc.local은 crontab과 더불어
아주 조심스럽게 다루어져야 할 부분임을
일요일 저녁에 또 다시 느끼게 되었습니다.
(또 어떤분은 이것 때문에 하루종일 고생하셨기에...T.T)
어느 분께는 도움이 되셨기를....
덧글
우분투 재시작시 instances 3 개가 자동으로 실해되게 해보려는데요
rc.local file 에서 마지막줄에
/파일경로/startup.sh PM7212 이런식으로 스크립트를 써넣어도 자동으로 실행되지가 않습니다.
혹시 조언좀 구할수 있을까요