getent passw username在引导时返回任何内容

时间:2016-09-22 08:47:08

标签: ubuntu service startup

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

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

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

/home/username1

当脚本在引导时运行时,该命令不返回任何内容。 为什么会这样?也许,用户(或超级用户)无法访问 / usr / bin / passwd 文件?

更新: 问题是 username1 存储在远程服务器中,因此LDAP在启动时加载它。执行上述命令时,LDAP状态为激活(启动),但未激活(正在运行)。它似乎是因为它没有完全启动,所以 username1 帐户没有加载到主机系统。

仍然我没有决定问题,现在我正在尝试,任何帮助/提示赞赏。

1 个答案:

答案 0 :(得分:0)

问题解决了!

这是一个固定的脚本,包含有关问题的行(此脚本提供dropbox守护程序启动|停止):

#!/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行我在slapd设施之后添加了$named

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

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

# Provides:          slapd

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

sleep 10s

现在它正常运作。