我刚开始学习木偶,遇到了一个问题,我想知道如果有人知道如何解决。我试图删除一个用户,我得到一个错误消息,说明他们login,所以不能被删除。
现在在这种情况下,我知道他们login的服务器,所以我可以简单地login用户,然后从那里继续。然而我的问题是,当你不知道他们login到什么服务器时,你会怎么做? 请记住它可能是许多服务器。
有没有强制删除选项或一种方式来login用户在木偶?
代码如下:
user {'art': ensure => absent, }
错误:
错误:无法删除user art:执行'/ usr / sbin / userdel art'返回8:userdel:user art当前login
错误:/ stage [main] / Main / Node [demo] / User [art] / ensure:从目前更改为不存在失败:无法删除用户art:执行'/ usr / sbin / userdel art'返回8:userdel :用户艺术当前login
根据这篇文章 ,你可以断开用户使用pkill -STOP -u USERNAME 。
你可以在puppet中创build一个资源定义 :
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': }
注意 :我没有testing这个。
请参阅资源sorting – 之前和要求和types引用 – 执行 。
你通过杀死它的父进程来终止会话,称为会话领导者。 找出它与哪个进程:
ps -dN | grep pts / 3
要么
正如@尼茨所提到的
pkill -9 -u用户名
并参考检查这个链接:
我如何强制其他用户注销?
删除用户进程正在运行时,我偶然发现了同样的问题。 我已经在生产服务器上testing了我的解决scheme,因此我可以提供一个有效的解决scheme,使用“确保”variables在单独的类中创build用户。 并根据variables决定是否调用过程停止序列,如下所示:
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', } }