我正在尝试将“useradd”的结果输出到日志文件,但不幸的是没有详细的选项。例如:“useradd dude”没有输出,除非用户已经存在。
我想做类似的事情: useradd -v dude > $logfile
我想我可以检查结果代码,如果 0 查询用户的 UID 和 GID 并将其写入日志文件,例如:
log=logfile
un=dude
if useradd ${un} &>> $log; then
uu=$(getent passwd ${un} | cut -d: -f3)
ug=$(getent passwd ${un} | cut -d: -f4)
uh=$(getent passwd ${un} | cut -d: -f6)
echo "User ${un} UID:${uu} GID:${ug} ${uh} successfully added." >> $log
fi
# cat logfile
User dude UID:1000 GID:1000 /home/dude successfully added.
useradd: user 'dude' already exists
但我想知道是否有更简单的选择。
操作系统:RHEL 7.7
解析 /var/log/secure 可能是另一个想法:
un=dude
useradd ${un} 2>&- &
bpid=$!
wait $bpid
ret=$?
sync
(grep "useradd\[${bpid}\]" /var/log/secure | tail -n 2) >> logfile
if [[ ${ret} -eq 0 ]]; then
echo do whatever you need to do
else
echo error
exit 1
fi
# ./abc
do whatever you need to do
# ./abc
error
# cat logfile
Aug 24 03:48:07 vm7031 useradd[4929]: new group: name=dude, GID=1000
Aug 24 03:48:07 vm7031 useradd[4929]: new user: name=dude, UID=1000, GID=1000, home=/home/dude, shell=/bin/bash
Aug 24 03:48:09 vm7031 useradd[4940]: failed adding user 'dude', exit code: 9
不过似乎需要同步,否则 grep 将无法工作。不确定,似乎有点矫枉过正。
选项 1(RHEL,DEBIAN)
以下是 RHEL 可用的另外两种可能性,基于 inotify-tools(据我记得默认情况下没有安装)。
/dev/null
管道是为了防止标准输出到终端,因为 -qq 没有描述的那么安静。对于DEBIAN发行版,更改
/var/log/secure
为./var/log/auth.log
sudo
root
root
1.监控后台的
/var/log/secure
变化:我真的很喜欢这个特殊的选项,因为它允许将不同部分(useradd、pam 等)
auth.log
或secure
登录到单独监控的子日志中。useradd
2.监控命令本身的使用情况打包为脚本并执行的任一选项
nohup [script] > /dev/null
都将在后台持续监控,即使终端关闭也是如此。选项 2(Debian)
或者在您的情况下甚至更好的选择可能是使用
adduser
并创建/usr/local/sbin/adduser.local
将在adduser
命令完成后执行的如果您创建
adduser.local
如下:每当创建新用户时,这应该会附加日志文件
选项 3(全部)
是的,
useradd
实际的输出被附加到/var/log/auth.log
作为示例对其进行了测试(显然在命令之前使用 sudo)
总而言之,我相信您正在寻找的是:
这将为您提供所有日志条目,其中包含用户添加到系统的名称和时间。
与其他发行版相比,似乎 useradd 或 adduser 选项在 RHEL 7 上受到更多限制。我决定做以下事情:
这将在后台执行 useradd,这对于 $! 将向我显示该特定进程的 PID。然后它将以相反的顺序在 /var/log/secure 中搜索进程 ID,并将输出写入我自己的日志文件。同步或暂停(睡眠 3)是必要的,但不应损害性能。