PID команд запускаются от имени другого пользователя

Будучи пользователем root, я хочу запустить службу от имени конкретного пользователя и записать его PID-файл. Минимальный нерабочий пример:

if [ $UID -eq 0 ]; then  
su myuser <<EOF 
sleep 30 &  
echo $! >mypid.pid  
EOF
fi  

После выполнения файл mypid.pid пуст, $! тоже пусто, но у моего пользователя есть спящий процесс с назначенным pid (очевидно). Я полагаю, что это потому, что новая оболочка порождается и как-то не отслеживает свою историю. Есть ли способ, которым я могу заставить это работать?

1 ответ

Решение

Потому что вы кормите оболочку, вызванную su(1) из сценария, $! интерпретируется вызовом скрипта su(1), Чтобы предотвратить это, нужно сбежать $!, затем $! получает корм к оболочке, вызванной su(1) а не вызывающий скрипт:

if [ $UID -eq 0 ]; then  
su myuser <<EOF 
sleep 30 &  
echo \$! >mypid.pid  
EOF
fi  
Другие вопросы по тегам