답변:
가장 간단한 방법은 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
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
내가하면 su www-data
모두가 바르 실행 설정 ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
이 잘 작동합니다. 어떻게 해결할 수 있습니까?
su
는 하나의 인수를 취하는데, 이것은 쉘 명령입니다. 당신은 쓰기에 필요 su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
하고 있는지 확인 MONOSERVER
하고 WEBAPPS
부모 쉘에 의해 수출하고 있습니다. (참고 : su … -c "$MONOSERVER …"
변수에 쉘 특수 문자가 포함 된 경우에는 실패하므로 수행하지 마십시오 .)와 같은start-stop-daemon
전용 데몬 실행기가있는 경우이를 사용하십시오.
경우 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
명령.
Usage: su [options] [LOGIN]
과su: unrecognized option '--debug'