gpt4 book ai didi

ubuntu - getent passwd 用户名在启动时不返回任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:22 26 4
gpt4 key购买 nike

我写了一个脚本作为 Ubuntu 启动服务(位于/etc/init.d 并在启动时运行)有一条线

HOMEDIR=`getent passwd username1 | cut -d: -f6`

问题是,当我在 shell 中运行脚本时,被记录为 username1 甚至 root,命令返回

/home/username1

当脚本在启动时运行时,该命令不返回任何内容。为什么会这样?也许,用户(或 super 用户)没有访问 /usr/bin/passwd 文件的权限?

更新:问题是 username1 存储在远程服务器中,因此 LDAP 在启动时加载它。当上面提到的命令执行时,LDAP 状态是activating (start) 但不是active (running)。似乎是因为它没有完全启动,所以 username1 帐户没有加载到主机系统。

我仍然未能解决问题,现在我正在尝试,感谢任何帮助/提示。

最佳答案

问题解决了!

这是一个固定脚本,包含与问题相关的行(此脚本服务于 dropbox daemon start | stop):

#!/bin/sh
# dropbox service
# Replace with linux users you want to run Dropbox clients for

### BEGIN INIT INFO
# Provides: dropbox
# Required-Start: $local_fs $remote_fs $network $syslog $named slapd
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: false
# Short-Description: dropbox service
### END INIT INFO
sleep 10s
DROPBOX_USERS="username1"
DAEMON=.dropbox-dist/dropboxd
start() {
echo "Starting dropbox..."
for dbuser in $DROPBOX_USERS; do
HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
if [ -x $HOMEDIR/$DAEMON ]; then
HOME="$HOMEDIR" start-stop-daemon -b -o -c $dbuser -S -x $HOMEDIR/$DAEMON &> /dev/null
fi
done
}

stop() {
echo "Stopping dropbox..."
for dbuser in $DROPBOX_USERS; do
HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
if [ -x $HOMEDIR/$DAEMON ]; then
/sbin/start-stop-daemon -o -c $dbuser -K -u $dbuser -x $HOMEDIR/$DAEMON
fi
done
}

status() {
for dbuser in $DROPBOX_USERS; do
dbpid=`pgrep -u $dbuser dropbox`
if [ -z $dbpid ] ; then
echo "dropboxd for USER $dbuser: not running."
else
echo "dropboxd for USER $dbuser: running (pid $dbpid)"
fi
done
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
exit 1
esac

exit 0

正如我所发现的,该脚本需要启动 LDAP 服务器,因此在第 7 行中,我在 $named 设施之后添加了 slapd:

# Required-Start: $local_fs $remote_fs $network $syslog $named slapd

其中 slapd 是 LDAP 的服务,在文件 /etc/init.d/slapd 中提供,它在第 3 行(init info block ):

# Provides:          slapd

因此,在我添加它之后,我在 50% 的情况下成功地在启动时运行了 dropbox。所以我添加了一个 hack:

sleep 10s

现在它可以正常工作了。

关于ubuntu - getent passwd 用户名在启动时不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39634315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com