매개변수를 사용하여 su -s 실행

매개변수를 사용하여 su -s 실행

명령을 사용하여 명령을 실행하여 su -s프로세스를 시작합니다. 루트 사용자가 프로세스를 소유하는 것을 원하지 않기 때문입니다.

나는 명령을 실행하여 이것을 시도했습니다

su -s "$CATALINA_HOME/bin/catalina.sh run" tomcat

반품su: /opt/apache-tomcat/bin/catalina.sh run: No such file or directory

su -s이 오류를 생성하지 않고 매개변수가 포함된 명령을 실행하려면 어떻게 해야 합니까 ?

답변1

당신이 달리고 있다면suas 를 root사용하여 -s다른 쉘을 지정하고( 여기서는 사용자에게 유효한 쉘이 없으므로 root필요에 따라 실행 ) 실행할 명령을 지정할 수 있습니다.tomcat-c

su -s /bin/sh -c "$CATALINA_HOME/bin/catalina.sh run" tomcat

당신은 찾을 수 있습니다start-stop-daemon유용합니다. 사용할 사용자와 그룹, 데몬 시작 방법 등을 지정하기 위한 많은 옵션이 있습니다.tomcat8초기화 스크립트데비안에서 사용하면 유용한 영감을 얻을 수 있습니다. 아니면 systemd 단위나 시스템 초기화에 적합한 무엇이든 작성하는 것을 고려할 수 있습니다.

답변2

-s명령의 스위치는 su지정된 사용자의 쉘을 변경하는 것입니다. 실행하려는 명령 앞에는 -c스위치가 와야 합니다.

따라서 찾고 있는 명령은 다음과 같습니다.

su -s /bin/bash -c "$CATALINA_HOME/bin/catalina.sh run" tomcat

답변3

다른 질문이 있으시면 방문해주세요.https://stackoverflow.com/questions/37753783/그리고신호 9에 의해 쉘 스크립트가 종료되었는지 알 수 있는 방법이 있습니까?귀하의 질문에서 누락된 점은 시작 시 Tomcat을 실행하려고 한다는 것입니다.

이 경우:

  • start-stop-daemon적합하지 않습니다.
  • 어느 것도 아니다 su.
  • Poor Man's Daemon Supervisor는 쉘 스크립트에서 PID 파일 관리도 수행하지 않습니다.

이들 모두는 신흥 기업이 하는 일을 모방하려고 합니다.곧장. su특히 권한을 제거하는 도구가 아니기 때문에 사용하기에는 좋지 않습니다. 그것은 도구이다다음에 추가로그인 세션의 권한. 요즘에는 다양한 로그인 세션 관리 하위 시스템의 배후에서 참여하므로 데몬에서 수퍼유저 권한을 제거하는 (훨씬 간단한) 작업에 특히 적합하지 않습니다. start-stop-daemon그냥 중복됩니다. 그리고Upstart는 프로세스 ID를 알고 있습니다.그 아이들.

시작 작업 파일에서 setuid및(해당하는 경우) setgid섹션을 사용하여 권한이 없는 사용자의 권한을 제거합니다.

setuid 바람둥이

catalina.sh(실제로는 필요하지 않음) 을 통해 전화하는 경우 sh -c시스템화된 House of Horror 영역에 속하지 마십시오. (upstart가 이러한 작업을 수행할 때 상황은 약간 덜 심각합니다.) daemontools 방식으로 작업을 수행하고 쉘을 스크립트에 연결하여 exec쉘의 명령을 통해 호출하여 upstart가 데몬을 직접 하위로 처리하도록 합니다. (그리고 신생기업 expect도 이 사실을 알고 올바른 스탠자를 사용하도록 하세요 .)

catalina.sh그러나 upstart는 systemd 및 기타 서비스 관리 도구와 마찬가지로 자신을 직접 호출 할 수 있으므로 명시적인 셸이 필요하지 않습니다 . 따라서 인터프리터가 /bin/bash실제로 스크립트에 대한 올바른 인터프리터인지 확인하는 것에 대해 걱정할 필요가 없습니다 .

$CATALINA_HOME/bin/catalina.sh를 실행하고 실행합니다.

추가 읽기

관련 정보