2013-04-23 6 views
1

나를 위해 몇 가지 프로세스를 시작하는 쉘 스크립트를 작성하고 있습니다. 이러한 프로세스는 sudo 액세스가 필요하기 때문에 sudo로 쉘 스크립트를 실행합니다. 그러나, 나는 그것을 할 때 내 경로 변수에 액세스 할 수 없습니다. 필자는 /etc/profile.d/extra-path.sh에 셸 스크립트를 추가하여 사용자에게 추가합니다.sudo로 쉘 스크립트를 실행할 때 사용자 경로를 사용할 수 없습니다.

다른 사람이 경로 변수를 추가해야하는 방법을 말해 줄 수 있습니다. sudo를 사용하여 쉘 스크립트에서 액세스 할 수 있도록하거나 쉘 스크립트 자체에서 내 사용자 경로와 함께 명령을 실행하는 방법이 있습니까? 여기

내가 작업이하고자하는 스크립트입니다 :

#!/bin/bash 
#start stuff up 

nohup mongod 
#mongod fails as an unknown command, even though it's part of my path 

nohup /cust/env/local/cust/jboss-5.1.0.GA/bin/run.sh -b 0.0.0.0 -Djava.awt.headless=true 
#jboss needs access to the JAVA_HOME path variable which 
#doesn't exist on the path used in this shell script 
+0

합니다 (이. 의미 "가 여기에 복사 한 경우이 파일을 읽기") 'man sudoers'를 들여다 보면'secure_path','env_reset','env_keep','env_check', 또는'exempt_group '까지도 할 수 있습니다. – Wrikken

답변

6

이 시도 ..

sudo -i /path/to/script.sh 

또는 ..

sudo env PATH=$PATH /path/to/script.sh 

또는 ..

sudo -E /path/to/script.sh 

시스템에 따라 그 중 하나가 작동해야합니다.

+0

내가 그렇게하려고하면'-sh : ./script.sh : no such file or directory'라는 오류 메시지가 나옵니다. 왜 그렇게 될지 아십니까? – CorayThan

+0

@ CorayThan- 당신의 스크립트 이름은'script.sh'이며 chmoded입니까? – vidit

+0

음, 정말로 시작 - 몽고 - 보스 .sh를 시도했습니다. 진짜 문제는 chmoded 것입니다. 스크립트를 chmoding하는 것은 무엇을합니까? 이 시스템은 CentOS 리눅스 서버입니다. – CorayThan

1

내가 알아 낸 몇 가지 해결책이 있습니다.

sudo -i [command] 

sudo -s [command] 

,하지만 당신은 루트 디렉토리에있을 것처럼 명령에 액세스, 그래서 당신은 쉘 스크립트의 전체 경로를 지정해야 -i와 두 작업 (또는 빈에 넣으십시오). -s 옵션을 사용하면 현재 디렉토리에있는 것처럼 명령에 액세스 할 수 있습니다.

myscript.sh 스크립트 자체를 실행하거나 내에서 sudo 액세스가 필요한 명령 앞에 스크립트를 사용할 수도 있습니다. 나는 스크립트를 실행하기 위해 타이핑 할 필요가없는 그런 식으로 명령 앞에 넣는 것을 선호했습니다!

2

sudos가 경로를 삭제한다는 사실이 특징입니다. 일부 예제처럼 사용자의 경로를 복사하여 작업하지 마십시오. (나쁜 사용자가/tmp/ls에 bash를 복사 한 다음 PATH =/tmp /를 설정하면 루트 셸이 ls 일 수 있으며 실수로 루트 권한으로 bash 명령을 실행하게됩니다!

당신은

. /etc/profile.d/extra-path.sh 

(단지 #!/bin/sh 아래) 스크립트의 상단에이를 추가하여 별도의 경로를 추가 할 수

관련 문제