init.d 스크립트를 편집 중입니다. init.d 스크립트는 유틸리티 스크립트를 실행 한 다음 프로세스를 실행합니다. bash 스크립트에서 특정 사용자 및 그룹으로 주요 프로세스를 시작하려면 어떻게해야합니까?
답변
가장 간단한 방법은 su (1) 명령을 사용하는 것입니다.이 명령에는 사용자의 쉘을 통해 명령을 실행할 수있는 옵션이 있습니다. 예 :
su foo -c ls
이것은 사용자 foo로 전환 하고 ls 명령을 실행합니다. 사용하려는 사용자에게 유효한 쉘이없는 경우 (즉, / bin / false 또는 / sbin / nologin과 같은 / etc / shells에없는 경우) 명령 행에서 쉘을 지정해야합니다. 출력 예 :
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
답변
경우 start-stop-daemon
시스템에 볼 수 있습니다 당신은 아마 그것을 사용하고 옵션 (특히 한 번 봐해야 -u
하고 -g
이 경우).
(그렇지 않으면, 당신의 조합을 사용할 수 있습니다 su
와 sg
.)
업데이트 : 다음은 일부 /etc/init.d/mpd
스크립트 에서 가져온 예제입니다 ( start-stop-daemon
).
-
시작 명령 :
echo "Starting Music Player Daemon" start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \ --pidfile /var/run/mpd.pid --make-pidfile \ -- --no-daemon /etc/mpd.conf 2>/dev/null
다음
--
에 오는 모든 것은/usr/bin/mpd
프로그램 자체에 대한 논쟁 입니다. (데몬 제거 절차는 start-stop-daemon 스크립트에 의해 처리되므로mpd
에 대해서는 신경 쓰지 않아도됩니다--nodaemon
.) -
정지 명령 :
echo "Stopping Music Player Daemon" start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
경우 mpd
자체적으로 권한을 포기하지 않은, 하나는 (예를 들어)를 추가해야합니다 -u mpd
, -g mpd
받는 옵션을 start-stop-daemon
명령.