回答:
最も簡単な方法は、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
、すべてのVARSを設定し、実行し${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'