2016-06-06 13 views
0

rc.local 스크립트에서 실행할 때 작동하지 않는 Sudo의 권한 관리자에 RHEL7 서버를 조인하는 명령이 있습니다. 아래의 명령은 특정 자산 대신 일반 이름을 사용합니다.rc.local 명령을 사용하여 암호를 보내려합니다.

echo "password"|/opt/quest/sbin/pmjoin_plugin -b -a -v -q -d masterport = 12345 -d FailOverTimeOut = 10 -d selecthostrandom = YES somehostname.com someotherhostname.com >> /var/log/Build.log

수동으로 또는 다른 bash 스크립트에서 실행 된 명령은 완벽하게 작동하지만 rc.local에서 실행될 때 암호 입력이 프롬프트 될 때 암호가 명령에 파이프되지 않는 것과 같습니다.

나는 도움이되지 않은 "플리머스 종료"와 같은 제안을 읽었습니다.

암호를 묻는 대화식 스크립트를 계속 진행할 수 있도록 rc.local 스크립트에서이 방법으로 암호를 "반향"하는 사람이 있습니까?

궁극적으로 이는 인스턴스를 처음 부팅 할 때 실행하고 싶을뿐입니다. 따라서 부팅 할 때 한 번 실행하고 rc.local없이 쉘 스크립트를 삭제하는 또 다른 방법이 있다면 그 경로를 탐색 할 수도 있습니다 (crontab, etc?).

+0

'echo "암호가있는 명령과 수동 암호 입력이 수동으로 또는 스크립트에서 작동한다고 말하는가? –

+0

@thatotherguy 맞습니다. rc.local에 관한 것이 동작을 바꾸는 것처럼 보이거나 다르게 작동합니다. rc.local에있는 명령을 명령 행에서 실행하면 모든 것이 정상적으로 진행됩니다. .sh 스크립트에 추가하고 해당 스크립트를 호출하는 경우와 동일합니다. rc.local 또는 rc.local에서 명령을 실행하면 .sh 스크립트에서 명령을 호출하려고 시도하면 작동하지 않습니다. >> /var/log/Build.log로 출력하는 로그는 나쁜 암호를 가지고있어 rc.local 내에서 암호가 같은 방식으로 (또는 전혀) 반향하지 않는다고 믿게 만듭니다. – Sadadar

+0

'echo "testtest"를 입력하면 어떻게됩니까? cat> /var/log/testtest.log' 당신의 rc.local에 testtest.log가 나타나나요? –

답변

0

나는 내 상황에서 효과가있는 해결책을 구현했다. rc.local에서 실행하는 것만 큼 깨끗하지는 않지만 작업이 완료됩니다.

나는 rc.local 스크립트에서 명령을 가져 와서 자신의 .sh 스크립트에 넣었다. AMI 빌드 프로세스는 /tmp/nameofscript.sh에이 프로세스를 저장하고 AMI 프로세스가 /etc/systemd/system/nameofservicefile.service에 저장하는 systemd 서비스 파일을 만들었습니다. 해당 서비스 파일은 ExecStart =/tmp/nameofscript.sh와 함께 실행되어 재부트시 실행됩니다. 우리의 rc.local은 phase1과 phase2의 방식으로 실행되며, phase1은 마지막에 재부팅됩니다. 그래서 phase1 부분에 라인을 추가하여 재부팅 직전에 "systemctl enable nameofservicefile.service"로 서비스를 활성화했습니다. phase1의 마지막 단계.

"phase1"끝에서 재부팅 한 후 systemd 서비스에서 스크립트가 트리거 된 이후 PM Sudo join 명령이 "phase2"단계에서 실행되도록이 경로를 활성화했습니다.

재부팅 할 때마다 실행되지 않도록 내 /tmp/nameofscript.sh 스크립트에는 rm -f /etc/systemd/system/nameofservicefile.server 및 rm- "$ 0"을 사용하여 자체를 삭제하는 단계가 있습니다. .

아마도이 작업을 수행하는 지저분한 방법 일 수도 있지만 작업이 완료됩니다.