나는 /etc/init.d/에 스크립트를 만들었는데 마치 마치 마치 홈 디렉토리의 다른 (루트가 아닌 권한있는) 사용자가 시작한 것처럼 다른 스크립트를 실행해야합니다.
이 스크립트를 다음과 같이 시작합니다. sudo -b -u <username> <script_of_a_particular_user>
그리고 작동합니다. 그러나 계속 실행되는 모든 사용자 스크립트 (예 : 일부 감시)에 대해 해당 부모 sudo 프로세스가 여전히 살아 있고 루트로 실행되는 것을 볼 수 있습니다. 활성 프로세스 목록에 혼란이 발생합니다.
그래서 내 질문은 : 기존 bash 스크립트에서 다른 사용자로 다른 스크립트를 시작하고 분리하여 분리 된 프로세스로 남겨 둘 수 있습니까?
더 자세한 설명 :
기본적으로 시스템의 다른 사용자에게 .startUp 및 .shutDown이라는 홈 디렉토리에있는 각 하위 디렉토리에있는 실행 파일을 실행하여 시스템 시작 또는 시스템 종료시 물건을 실행할 수있는 수단을 제공하려고합니다. 내가 할 수있는 다른 방법을 찾지 못했기 때문에 정확히 그것을 수행하는 bash 스크립트를 작성하고 /etc/init.d/에서 서비스 스크립트로 (스켈레톤 예제를 따라) 구성했습니다. start 인수를 사용하면 .startUp 디렉토리에서 모든 것을 시작하고 stop 인수로 실행하면 모든 사용자의 .shutDown 디렉토리에서 모든 것을 시작합니다.
또는이 문제를 해결하기 위해 기존 솔루션을 사용할 수 있다면 관심이 있습니다.
업데이트
조금 둘러 보았고이 질문을 찾았습니다 :
/unix/22478/detach-a-daemon-using-sudo
거기에 허용되는 대답은 다음을 사용 sudo -u user sh -c "daemon & disown %1"
하는 것입니다. 그러나 나는 또한 % 1을 제거 하지 않고 시도했지만 동일합니다. 그래서 이것이 내가 예상 한대로 작동합니다.
sudo -u <username> bash -c "<script_of_a_particular_user> &"
내 추가 질문은 지금 왜 불명예하지 않고 작동합니까? 특별한 경우에 관계없이 불허 전화를 떠나야 합니까?
업데이트 2
분명히 이것은 작동합니다.
su <username> -c "<script_of_a_particular_user> &"
이 호출과 sudo 호출간에 차이가 있습니까? 나는 이것이 완전히 다른 질문이라는 것을 알고 있습니다. 그러나 내가이 주제를 위해 아마도 여기에서 답을 찾고 있기 때문에 누군가가 이것을 분명히 할 수 있습니다.
업데이트 3
su 또는 sudo를 사용하는 두 가지 방법 모두 시스템을 부팅 한 후 새로운 startpar 프로세스 (루트로 실행되는 단일 프로세스)를 생성합니다 . 프로세스 목록에 다음과 같이 표시됩니다.
startpar -f -- <name_of_my_init.d_script>
이 프로세스가 생성되는 이유는 무엇입니까? 분명히 다른 init.d 스크립트 에서이 프로세스를 실행하지 않기 때문에 뭔가 잘못하고 있습니다.
업데이트 4
startpar 관련 문제가 해결되었습니다. 나는 그것에 대한 또 다른 질문을 시작했다 :
rc.local 또는 init.d에서 프로세스를 시작할 때 startpar 프로세스가 정지 상태로 남았습니다.
또한 권한이없는 사용자를위한 시작 메커니즘에 대한 추가 질문 :
초기화 및 종료 자동 실행 기능이있는 일반 사용자 (비 루트) 제공