ここにあるすべての提案を見た後、私の立場にある他の人に役立つと思われるいくつかのことを発見しました:
<オール>
 /etc/init.d/functions に戻るように指示するホップは正しい :daemon 機能ではすでに代替ユーザーを設定できます:
daemon --user=my_user my_cmd &>/dev/null &
 これは、プロセス呼び出しを runuser でラップすることによって実装されます -これについては後で詳しく説明します。
Jonathan Leffler は正しい:Python には setuid があります:
import os
os.setuid(501) # UID of my_user is 501
ただし、JVM 内から setuid できるとはまだ思えません。
 su でもありません runuser でもありません すでに使用しているユーザーとしてコマンドを実行するように要求する場合を適切に処理します。例:
[[email protected]_host]$ id
uid=500(my_user) gid=500(my_user) groups=500(my_user)
[[email protected]_host]$ su my_user -c "id"
Password: # don't want to be prompted!
uid=500(my_user) gid=500(my_user) groups=500(my_user)
 su の動作を回避するには と runuser 、init スクリプトを次のように変更しました:
if [[ "$USER" == "my_user" ]]
then
    daemon my_cmd &>/dev/null &
else
    daemon --user=my_user my_cmd &>/dev/null &
fi
助けてくれてありがとう!
 Debian では start-stop-daemon を使用します pid ファイルの処理、ユーザーの変更、デーモンのバックグラウンド化などを行うユーティリティです。
 RedHat には詳しくありませんが、daemon すでに使用しているユーティリティ (/etc/init.d/functions で定義されています) 、ところで) start-stop-daemon と同等のものとしてどこでも言及されています であるため、プログラムの uid も変更される可能性があるか、またはその方法がすでに正しいものになっている可能性があります。
 ネットを見回すと、使用できる既製のラッパーがいくつかあります。すでに RedHat にパッケージ化されているものもあります。 daemonize を見てください 、たとえば。