shell script를 cron으로 동작시킬때 .bashrc .bash_profile의 변수가 적용되지 않는다
2017.09.08 18:50
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
shell script를 cron으로 동작시킬때 .bashrc .bash_profile의 변수가 적용되지 않는다
예1) 오라클 sqlplus 를 동작시키는 shell script를 작성하여 테스트 해봤을때 정상동작하는 것을 확인했는데,
crontab에 등록하여 실행하면 sqlplus가 실행되지 않는다.
예2) foobar 유저의 .bash_profile 에 FOOBAR="foobar" 라는 변수를 설정하고
shell script 작성하여 직접 실행시 FOOBAR 변수의 내용이 잘 보이는데, crontab에 등록하면 FOOBAR 변수값이 미지정으로 나온다.
원인
: .bashrc .bash_profile 등의 초기화 파일은 interactive mode에서만 실행되기 때문이다.
man bash 내용에서 발췌
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
위와 같이 /etc/profile, ~/.bash_profile, ~/.bashrc 초기화 파일은 login shell 혹은 interactive-shell 에서만 수행되기 때문에
crontab 으로 수행시 초기화파일에 정의한 환경변수는 적용되지 않는다.
shell의 수행환경
- interactive shell : shell login을 수행하는 환경 (terminal 혹은 ssh remote login)
- non-interactive shell : shell login을 수행하지 않는 환경 (crontab 실행)
해결방법
1. shell script 안에 초기화파일 수행하는 라인을 추가한다.
#!/bin/bash
. ~/.bash_profile
2. script의 첫 라인에 bash -login 옵션을 사용한다. --login 옵션을 사용하면 초기화파일이 모두 수행된다.
#!/bin/bash --login
man bash 내용에서 발췌
-l Make bash act as if it had been invoked as a login shell (see INVOCATION below).
--login
Equivalent to -l.
3. root 유저를 이용한다.
root 유저의 cron에 등록하여 su 스위치를 -c 옵션과 같이 사용하면 초기화파일이 수행된다.
예) 0 0 * * * su - foobar -c /home/foobar/foobar.sh
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 게시자료 열람자유. 불펌금지입니다. | 조인상 | 2010.12.07 | 30770 |
104 | 원격지에서 FTP이용 백업 | 조인상 | 2010.05.09 | 8691 |
103 | ksh에서 자동완성기능 사용하기 | 조인상 | 2010.05.12 | 10326 |
102 | iptables로 NAT + Portforwarding 구성하기 | 조인상 | 2010.05.12 | 8653 |
101 | NAT로 서비스 받는 컴퓨터에서 MSN 파일 전송기능사용하기 | 조인상 | 2010.05.12 | 8906 |
100 | 리눅스 환경에서 Xmanager 사용법 | 조인상 | 2010.05.12 | 19188 |
99 | NAT환경에서 넷미팅 사용하기 | 조인상 | 2010.05.12 | 9540 |
98 | 새로운 디스크를 ext3로 파일시스템 생성하기 | 조인상 | 2010.05.12 | 8757 |
97 | APM 설치하기 | 조인상 | 2010.05.12 | 8062 |
96 | mysql 4 버전 설치하기 | 조인상 | 2010.05.12 | 11671 |
95 | 터미널에서 한글을!! Unicon 소개/설치 | 조인상 | 2010.05.12 | 12369 |
94 | 내가 즐겨사용하는 프롬프트 변수(PS1) 설정치 | 조인상 | 2010.05.12 | 10352 |
93 | NFS 관련 명령어 및 파일들 | 조인상 | 2010.05.12 | 14451 |
92 | 2G이상 파일 tar 로 생성 / 분할생성(복사) | 조인상 | 2010.05.12 | 12998 |
91 | 리눅스 가상 IP 설정 | 조인상 | 2010.05.12 | 30764 |
90 | 리눅스에 Qlogic2300 HBA카드로 어레이 붙이기 | 조인상 | 2010.05.12 | 20215 |
89 | HBA카드의 WWNN과 WWPN에 대한 포럼 내용 | 조인상 | 2010.05.12 | 17514 |
88 | 리눅스에서 HBA카드의 WWN확인 방법 | 조인상 | 2010.05.12 | 54483 |
87 | 리눅스에서 플로피 사용하기 | 조인상 | 2010.05.12 | 8949 |
86 | LVM(Linux Volume Manager) 구축하기 | 조인상 | 2010.05.12 | 15329 |
85 | 삼바 세팅 및 사용법 [1] | 조인상 | 2010.05.12 | 25139 |