首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行useradd失败

执行useradd失败
EN

Server Fault用户
提问于 2011-11-29 11:35:17
回答 4查看 2.9K关注 0票数 0

据我所知,木偶就像根一样。作为根,我启动

代码语言:javascript
复制
 puppetd --onetime --no-daemonize --verbose

所以我不明白为什么这不管用

代码语言:javascript
复制
exec { "useradd -m testuser":
       path => "/bin:/usr/bin",
     }

我只得到:

代码语言:javascript
复制
...Exec[useradd -m testuser]/returns: change from notrun to 0 failed:useradd -m testuser returned 1 instead of one of [0] at...

如果我直接执行这个命令,它就能正常工作。

有什么想法吗?

PS: exec { "touch / root /a.test":}是成功的,因此它实际上是作为root执行的。

PS2:我在执行"apt-get自动删除“时遇到了同样的问题。

EN

回答 4

Server Fault用户

回答已采纳

发布于 2011-11-29 12:19:41

在大多数系统中,useradd将位于一个sbin文件夹中,而不是/bin或/usr/bin。您的路径应该是"/bin:/usr/bin:/sbin:/usr/sbin",。虽然这个解决方案相当麻烦,但我会使用用户类型而不是执行程序,它将使您更好地管理主机上的用户(检查-和存在需要等等)。

代码语言:javascript
复制
@user {
  "testuser":
    uid => ,
    gid =>,
    password => #hash of password,
    home => ,
    groups => ,
}

这是一个虚拟资源,可以通过realize ( User[testuser])添加到主机上,允许多次引用它。

这是一个很好的简单的解决方案

票数 1
EN

Server Fault用户

发布于 2011-11-29 12:26:54

尝试使用以下命令运行该命令:

代码语言:javascript
复制
exec { "useradd -m testuser":
  path => "/bin:/usr/bin",
  logoutput => true,
}

看看上面写了什么。它现在应该会在命令行上出现错误。另外,“on_failure”也是另一个选项,它只在命令失败时输出。我通常会:

代码语言:javascript
复制
Exec {
  logoutput => on_failure,
}

默认情况下,如果这些命令失败,那么我的所有命令都会在全局上输出有意义的内容。

但通常情况下,您可以使用“用户”资源,而不是:

代码语言:javascript
复制
user { "myusername":
  ensure => present,
  managehome => true,
}

这里仅记录了与其他资源类型有关的详细文档:

https://puppet.com/docs/puppet/latest/types/user.html

票数 4
EN

Server Fault用户

发布于 2011-11-29 12:16:12

它可以工作,但是它返回1而不是0吗?尝试在该echo $?命令之后运行useradd

通过使用内置的木偶类型来获得更好的错误消息,而不是像这样使用exec:

代码语言:javascript
复制
user { "foo":
  ensure => present,
  uid => 1001,
  password => '<some password hash>',
  shell => "/bin/bash",
  home => "/home/foo",
  groups =>  ["foogroup"],
  managehome => true,
}

你有什么理由不这么做而用exec吗?

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/335742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档