我尝试添加用户帐户,但它给我useradd:无法锁定/ etc / passwd;稍后再试 我应该怎么做才能写下这段代码
echo -n "Enter a number of user account "
read n
for((i=1;i<n;i++));
useradd CPE_User$i
done
答案 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