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始终有效,但第二个ldapid抛出了相同的错误Could not guess user
。
这最终被证明是一个文件描述符问题,并通过使用以下片段解决:
while read line <&3
do
ldapid
done 3< "Some file"
对于cron,由于缺乏更好的理解,我不知道如何做类似的事情,任何帮助都将不胜感激。非常感谢。
------------编辑更多详细信息,请参阅PiratTian的回复------------------
很抱歉,如果我早点说的话,我只想保持简单,这样就可以很容易地复制。表单
#!/bin/bash
/usr/sbin/ldap<script> $user
是我在相当长的剧本中所写的。确切的命令,就在我的脚本的开头,在这里,整件事都失败了,并出现错误cannot guess user
,是description=$(ldapfinger "$user" |grep description |cut -d: -f2)
,其中$user在前一行定义。将$user替换为harcoded username
也没有帮助。
似乎任何作为参数传递的隐式或显式输入,在作为cron作业运行时都会被忽略,并返回错误Cannot guess user
。另一方面,当我手动运行相同的脚本时,一切都会按预期进行。(注意,这是在ldapscripts更新之前的一个工作脚本)。
冒着听起来很愚蠢的风险,我还尝试在脚本中使用bash -c
运行命令,并在crontab中使用* * * * * root /path/to/script.sh<&0
,得到相同的结果,即Cannot guess user
。
我在Debian Wheezy(Linux earth 3.2.0-4-686-pae#1 SMP Debian 3.2.46-1 i686 GNU/Linux)下遇到了类似的问题
为了使ldapscripts工作,我对"/usr/share/ldapscripts/runtime"的内容进行了一些更改。代替行:
USER=$(logname 2>/dev/null)
我刚用过
USER=$(whoami 2>/dev/null)
因为我发现它主要用于日志记录(但我对检查不是很严格)。
这个作业只比上一篇文章中显示的片段高出一行。上述帖子的解决方案不起作用,因为该脚本中忽略了环境变量。
关于ldapaddgroup之类的脚本,该包还有一个问题是由于无法执行操作而导致的。事实上,我的问题是ldapscripts包默认使用libnss-ldap和libpam-ldap的设置(在我的情况下不是这样,因为我安装了libnss-ldap*d*和libpam-krb5)。因此,我对/etc/ldapscripts/ldapscripts.conf进行了手动配置,我尝试过的所有脚本都可以使用
希望得到帮助。
脚本是否依赖于shell通常提供的${USER}变量?
正在检查您找到的/usr/sbin/ldapid:
# Current user
[ -z "$USER" ] && end_die 'Could not guess current user (no $USER variable set)'
_USER="$USER"
else
_USER="$2"
试试类似的东西:* * * * * USER=myuser ldapid
或者由于您是从脚本运行的:
#!/bin/bash
USER=$(/usr/bin/whoami)
/usr/sbin/ldapid
或者下面(看起来ldapid接受user作为第一个参数
#!/bin/bash
/usr/sbin/ldapid username