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