我写了一个脚本作为Ubuntu启动服务(位于/etc/init.d并在启动时运行) 有一行
HOMEDIR=`getent passwd username1 | cut -d: -f6`
问题是,当我在shell中运行脚本,记录为 username1 甚至是root时,命令返回
/home/username1
当脚本在引导时运行时,该命令不返回任何内容。 为什么会这样?也许,用户(或超级用户)无法访问 / usr / bin / passwd 文件?
更新: 问题是 username1 存储在远程服务器中,因此LDAP在启动时加载它。执行上述命令时,LDAP状态为激活(启动),但未激活(正在运行)。它似乎是因为它没有完全启动,所以 username1 帐户没有加载到主机系统。
仍然我没有决定问题,现在我正在尝试,任何帮助/提示赞赏。
答案 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
现在它正常运作。