当我以 root 身份启动服务时,我想以特定用户身份启动服务并写入其 PID 文件。最小的非工作示例:
if [ $UID -eq 0 ]; then
su myuser <<EOF
sleep 30 &
echo $! >mypid.pid
EOF
fi
执行后,文件 mypid.pid 为空,$! 也为空,但有一个分配给我的用户的进程处于休眠状态(显然如此)。我推测这是因为生成了一个新的 shell,但不知何故它没有跟踪其历史记录。有什么办法可以让它工作吗?
答案1
su(1)
因为你从脚本中传入 调用的 shell ,$!
所以 会被调用的脚本解释su(1)
。防止这种情况的方法是转义$!
,然后$!
才会被传入 调用的 shellsu(1)
而不是调用脚本:
if [ $UID -eq 0 ]; then
su myuser <<EOF
sleep 30 &
echo \$! >mypid.pid
EOF
fi