Prerequisite: ldapscripts package, Version: 2.0.1-1
uname output: Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux
评论:这个问题使用ldapid
哪个是ldapscripts
包的许多脚本部分之一。可以使用此包中的任何脚本复制此行为。
考虑以下两行 bash 脚本:
#!/bin/bash
ldapid
从 shell 运行时,这工作正常。一旦它成为一个 cron 作业,Could not guess user
就会抛出错误消息。
我之前遇到过类似的问题,请考虑以下 bash 脚本:
#!/bin/bash
ldapid
while read line
do
ldapid
done <"Some file"
第一个 ldapid 总是有效,但第二个抛出了同样的错误Could not guess user
。
这最终证明是文件描述符问题,并通过使用以下代码段解决:
while read line <&3
do
ldapid
done 3< "Some file"
对于 cron,由于缺乏更好的理解,我不知道如何做类似的事情,任何帮助将不胜感激。提前谢谢了。
------------在 PiratStian 回复后编辑更多细节 -----
对不起,如果我早点说,只是想保持简单,以便可以轻松复制。表格
#!/bin/bash
/usr/sbin/ldap<script> $user
是我相当长的剧本中的内容。确切的命令,就在我的脚本开头并且整个事情因错误而失败的地方cannot guess user
是 description=$(ldapfinger "$user" |grep description |cut -d: -f2)
$user 之前定义的一行。用硬编码替换 $userusername
也无济于事。
似乎任何作为参数隐式或显式传递的输入在作为具有错误的 cron 作业运行时都会被忽略Cannot guess user
。另一方面,当我手动运行相同的脚本时,一切都按预期工作。(请注意,这是在使用 ldapscripts 进行一些更新之前的工作脚本)。
冒着听起来很愚蠢的风险,我还尝试bash -c
在脚本内部运行命令,并* * * * * root /path/to/script.sh<&0
在 crontab 中使用相同的结果,Cannot guess user
.