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

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

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

1 ответ1

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .