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
の多くのスクリプト部分の 1 つであるものを使用します。ldapscripts
この動作は、このパッケージのどのスクリプトでも再現できます。
次の 2 行の bash スクリプトを検討してください。
#!/bin/bash
ldapid
これは、シェルから実行すると正常に機能します。cron ジョブになるとすぐに、エラー メッセージCould not guess user
がスローされます。
以前にも同様の問題がありました。次の bash スクリプトを検討してください。
#!/bin/bash
ldapid
while read line
do
ldapid
done <"Some file"
最初の ldapid は常に機能しましたが、2 番目の 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 が 1 行前に定義されている場合です。$user を harcoded に置き換えても役に立ちusername
ません。
パラメーターとして暗黙的または明示的に渡された入力は、エラーで cron ジョブとして実行されると無視されるようCannot guess user
です。一方、同じスクリプトを手動で実行すると、すべてが意図したとおりに機能します。(そして、これは ldapscripts で更新される前の作業スクリプトであったことに注意してください)。
ばかげているように聞こえるかもしれませんがbash -c
、スクリプト内でコマンドを実行し* * * * * root /path/to/script.sh<&0
、crontab で使用しても同じ結果が得られましたCannot guess user
。