Я только начал изучать марионетку и столкнулся с проблемой, которую мне было интересно, знает ли кто-нибудь, как ее исправить. Я пытаюсь удалить пользователя, я получаю сообщение об ошибке, в котором говорится, что он вошел в систему, поэтому его нельзя удалить.
Теперь в этом случае я знаю, на какой сервер они вошли, поэтому я могу просто вывести пользователя из системы и продолжить оттуда. Мой вопрос, однако, что вы делаете, когда не знаете, на какие серверы они вошли? Имея в виду, что серверов может быть много.
Есть ли опция принудительного удаления или способ выхода пользователей из марионетки?
Код ниже:
user {'art':
ensure => absent,
}
Ошибки:
Ошибка: не удалось удалить изображение пользователя: выполнение '/ usr / sbin / userdel art' вернулось 8: userdel: пользовательское искусство в настоящее время находится в системе
Ошибка: / Stage [main] / Main / Node [demo] / User [art] / sure: изменение с настоящего на отсутствующее не удалось: не удалось удалить пользовательский рисунок: возвращено выполнение '/ usr / sbin / userdel art' 8: userdel : пользовательское искусство в настоящее время находится в системе
В соответствии с эта почта, вы можете отключить пользователей, используя pkill -STOP -u USERNAME
.
Вы можете создать определение ресурса что-то это в марионетке:
define kill_and_delete {
exec { "killing $title":
command => "pkill -STOP -u $title",
onlyif => "grep '^$title' /etc/passwd",
before => User[$title],
}
user { $title: ensure => absent}
}
После этого вы используете его так:
kill_and_delete {'art': }
Заметка: Я не тестировал это.
видеть заказ ресурсов - до и требуется и ссылка на тип - exec.
Вы завершаете сеанс, убивая его родительский процесс, называемый лидером сеанса. Узнайте, с каким процессом это происходит:
пс -dN | grep pts / 3
или
Как упомянул @Nitz
pkill -9 -u имя пользователя
И для справки проверьте эту ссылку:
Я столкнулся с той же проблемой при удалении пользователя, у которого выполнялись процессы. Я протестировал свое решение на нашем производственном сервере и поэтому могу предоставить действительное решение, в котором я создаю пользователей в отдельном классе с использованием переменных «обеспечения». И на основе переменной я решаю, вызывать ли последовательность остановки процесса следующим образом:
define your_class::user (
$user = $name,
$ensure = 'present',
){
# only call when user gets removed
if $ensure == 'absent' {
exec {
"killing ${user}":
command => "pkill -9 -u ${user}",
# need to check if user exists and processes are running
# otherwise command would fail with no processes
onlyif => "grep '^${user}' /etc/passwd && ps -u ${user}",
# run before user gets removed
before => User[$user];
}
}
# create/remove user with managed home
user {
$user:
ensure => $ensure,
home => "/home/${user}",
managehome => true,
shell => '/bin/bash',
}
}