我有一些麻烦在Ubuntu机器上安装Mysql服务器。 经过一番search之后,我发现Mysql的初始化脚本(/etc/init.d/mysql)会尝试调用“/etc/lsb-base-logging.sh”shell脚本,它的四行代码检查variables的值“INITOUTPUT”,这个variables没有定义。
我刚刚评论这4条线,一切正常。 我检查了使用Fedora 10的笔记本电脑,而且根本没有“lsb-base-logging.sh”脚本。 有人知道这个脚本在系统中做了什么特定的任务,为什么它使用一个没有定义的variables? 这个variables实际上是什么?
更新我在这里附上脚本。 文件:/etc/lsb-base-logging.sh
# Default init script logging functions suitable for Ubuntu. # See /lib/lsb/init-functions for usage help. # edited by Farzad Ghanei lines 84, 114, 136, 156 are commented to fix mysql server start . /etc/default/rcS log_use_usplash () { if [ "${loop:-n}" = y ]; then return 1 fi type usplash_write >/dev/null 2>&1 } log_to_console () { [ "${loop:-n}" != y ] || return 0 [ "${QUIET:-no}" != yes ] || return 0 # Only output to the console when we're given /dev/null stdin=`readlink /proc/self/fd/0` [ "${stdin#/dev/null}" != "$stdin" ] || return 0 func=$1 shift loop=y $func "$@" </dev/console >/dev/console 2>&1 || true } log_success_msg () { if log_use_usplash; then usplash_write "STATUS $*" || true fi log_to_console log_success_msg "$@" echo " * $@" } log_failure_msg () { if log_use_usplash; then usplash_write "STATUS $*" || true fi log_to_console log_failure_msg "$@" if log_use_fancy_output; then RED=`$TPUT setaf 1` NORMAL=`$TPUT op` echo " $RED*$NORMAL $@" else echo " * $@" fi } log_warning_msg () { if log_use_usplash; then usplash_write "STATUS $*" || true fi log_to_console log_warning_msg "$@" if log_use_fancy_output; then YELLOW=`$TPUT setaf 3` NORMAL=`$TPUT op` echo " $YELLOW*$NORMAL $@" else echo " * $@" fi } log_begin_msg () { log_daemon_msg "$1" } log_daemon_msg () { if [ -z "$1" ]; then return 1 fi if log_use_usplash; then usplash_write "TEXT $*" || true fi log_to_console log_daemon_msg "$@" # if [ "$INITOUTPUT" = "yes" ]; then if log_use_fancy_output && $TPUT xenl >/dev/null 2>&1; then COLS=`$TPUT cols` if [ "$COLS" ] && [ "$COLS" -gt 6 ]; then COL=`$EXPR $COLS - 7` else COLS=80 COL=73 fi # We leave the cursor `hanging' about-to-wrap (see terminfo(5) # xenl, which is approximately right). That way if the script # prints anything then we will be on the next line and not # overwrite part of the message. # Previous versions of this code attempted to colour-code the # asterisk but this can't be done reliably because in practice # init scripts sometimes print messages even when they succeed # and we won't be able to reliably know where the colourful # asterisk ought to go. printf " * $* " # Enough trailing spaces for ` [fail]' to fit in; if the message # is too long it wraps here rather than later, which is what we # want. $TPUT hpa `$EXPR $COLS - 1` printf ' ' else echo " * $@" COL= fi # fi } log_progress_msg () { : } log_end_msg () { if [ -z "$1" ]; then return 1 fi if log_use_usplash; then if [ "$1" -eq 0 ]; then usplash_write "SUCCESS OK" || true else usplash_write "FAILURE failed" || true fi fi log_to_console log_end_msg "$@" # if [ "$INITOUTPUT" = "yes" ]; then if [ "$COL" ] && [ -x "$TPUT" ]; then printf "\r" $TPUT hpa $COL if [ "$1" -eq 0 ]; then echo "[ OK ]" else printf '[' $TPUT setaf 1 # red printf fail $TPUT op # normal echo ']' fi else if [ "$1" -eq 0 ]; then echo " ...done." else echo " ...fail!" fi fi # fi return $1 } log_action_msg () { if log_use_usplash; then usplash_write "TEXT $*" || true fi log_to_console log_action_msg "$@" echo " * $@" } log_action_begin_msg () { log_daemon_msg "$@..." } log_action_cont_msg () { log_daemon_msg "$@..." } log_action_end_msg () { # In the future this may do something with $2 as well. log_end_msg "$1" || true }
我的/etc/lsb-base-logging.sh和你的是一样的,除了与“INITOUTPUT”variables和. /etc/default/rcS . /etc/default/rcS行附近开始。
看起来,而不是注释掉行,你应该在/etc/default/rcS文件中添加INITOUTPUT=yes 。 该variables旨在控制系统启动期间是否执行某些日志输出。
至于脚本的目的,这是从/usr/share/doc/lsb-base/README.Debian.gz :
Debian的lsb-base软件包提供了一系列的日志function 允许初始化脚本操作的简化logging。 这些function是 特定于Debian和(在某些情况下)其他派生分布。
你有什么版本的Ubuntu?