useradd:从脚本调用时无法锁定/ etc / passwd

时间:2013-10-10 11:16:36

标签: bash unix ubuntu-12.04

我尝试添加用户帐户,但它给我useradd:无法锁定/ etc / passwd;稍后再试 我应该怎么做才能写下这段代码

echo -n "Enter a number of user account  "
read n

for((i=1;i<n;i++));
    useradd CPE_User$i
done

2 个答案:

答案 0 :(得分:1)

没有关于该脚本的错误,除了它快速调用useradd - 如果由前一个useradd实例启动的任何内容(当它在/etc/passwd上锁定时)是仍在运行,新实例将失败。

查看该错误是否具有明显的退出状态。如果是,您可以检测它并再试一次。

例如,如果退出状态为5

useradd "CPE_User$i"; status=$?
case $status in
  0) break ;;
  5) echo "waiting to retry after exit status $status..." >&2
     sleep 1
     continue
     ;;
  *) echo "unexpected exit status $status" >&2
     exit ;;
esac

useradd由您的操作系统提供,并非标准化工具,因此其使用和退出状态行为会因平台而异。您可以通过选中$?确定退出状态。

你可以尝试的另一种方法(如果问题每次都在循环中发生)是你自己的锁定:

for ((i=1; i<n; i++)); do
  {
    flock -x 200
    useradd CPU_User"$i"
  } 200>/tmp/passwd.lock
done

如果 else 分别锁定/etc/passwd,这将无济于事,但如果某些内容继承useradd的锁定(因为它现在会继承),可能会解决问题你的锁也是。)

答案 1 :(得分:0)

我遇到了同样的问题,我尝试执行以下操作,但是没有运气

rm -rf /etc/*.lock 

后来,我发现以下命令也将列出隐藏的锁定文件。

find /etc | grep -iE '.lo?ck$'

/etc/selinux/targeted/semanage.read.LOCK
/etc/selinux/targeted/semanage.trans.LOCK
/etc/selinux/targeted/active/modules/100/clock
/etc/selinux/targeted/active/modules/100/sanlock
/etc/selinux/targeted/active/modules/100/vlock
/etc/pam.d/vlock
/etc/.pwd.lock

在输出中,我得到了罪魁祸首文件,并且在消除此问题后得到了解决

rm -rvf /etc/.pwd.lock