Results 1 to 6 of 6

Thread: command"service" will break env var

  1. #1
    ayanamist NNTP User

    Default command"service" will break env var

    i'm using openSUSE 11.2 from official site and no mod to kernel file.
    i usually use command "service" to control the services running. however i recently found a service can't run normally.
    i am a chinese user and storing many files with chinese name. of course, filename and filesystem are all utf-8 encoded.
    i'm using a soft to deliver these files. this soft is the abnormal soft i mentioned above.
    when i use "/etc/init.d/xxx start" to start it, everything works fine, but when i use "service xxx start", problem happens: it cant find any file with chinese characters.
    that's strange.
    so i open "/sbin/service" to see what breaks that, and i get it.

    #!/bin/sh
    #
    # /sbin/service Handle boot and runlevel services
    #

    #
    # Only root should do
    #
    if test "$(id -u)" -ne 0; then
    echo "${0##*/}: only root can use ${0##*/}" 1>&2
    exit 1
    fi

    #
    # Location of our service scripts
    #
    RCDIR="/etc/init.d"

    #
    # Clean environment
    #
    PATH=/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
    test -n "$TERM" || TERM=raw
    LANG=POSIX
    export PATH TERM LANG


    exec_rc ()
    {
    env -i LANG=$LANG PATH=$PATH TERM=$TERM ${1+"$@"}

    }

    usage ()
    {
    echo "Usage: ${0##*/} [--help | --status-all | <service> [<args>| --full-restart]]" 1>&2
    exit 1
    }

    help ()
    {
    echo "Usage: ${0##*/} [<options> | <service> [<args> | --full-restart]]"
    echo "Available <options>:"
    echo " -h,--help This help."
    echo " -s,--status-all List out status of all services."
    echo "Usage for specific <service>:"
    echo " ${0##*/} service_name argument [option]"
    echo " ${0##*/} service_name --full-restart"
    echo " ${0##*/} --full-restart service_name"
    exit 0
    }

    status_all=0
    full_restart=0
    args=""
    while test $# -gt 0; do
    opt=
    if test "${1::1}" = "-"; then
    if test ${#1} -gt 2 -a "${1::2}" = "--" ; then
    opt="${1:2}"
    else
    opt="${1:1}"
    fi
    shift
    else
    args="${args:+$args }$1"
    shift
    continue
    fi

    case "$opt" in
    status-all|s) status_all=1 ;;
    full-restart) full_restart=1 ;;
    h*) help ;;
    *) usage ;;
    esac
    done

    #
    # Determine the status of all services
    #
    if test $status_all -gt 0 ; then
    if test -n "$args" ; then
    usage 1>&2
    exit 1
    fi
    for rc in ${RCDIR}/*; do
    test ! -x "$rc" -o -d "$rc" && continue
    case "${rc##*/}" in
    *.local|*.rpm*|*.ba*|*.old|*.new) continue ;;
    *.dpkg|*.save|*.swp|*.core) continue ;;
    boot|rc|single|halt|reboot) continue ;;
    powerfail|rx|Makefile|README) continue ;;
    skeleton|*.d) continue ;;
    esac
    exec_rc $rc status
    done
    exit 0
    fi

    #
    # Do a full restart of a few services
    #
    if test $full_restart -gt 0 ; then
    if test -z "$args" ; then
    usage 1>&2
    exit 1
    fi
    for rc in $args; do
    if test ! -x ${RCDIR}/$rc ; then
    echo "${0##*/}: no such service $rc" 1>&2
    exit 1
    fi
    done
    status=0
    for rc in $args; do
    rc=${RCDIR}/$rc
    exec_rc $rc stop
    exec_rc $rc start
    test $? -gt 0 && status=1
    done
    exit $status
    fi


    #
    # Execute single service with options
    #
    if test -z "${args}" ; then
    usage 1>&2
    exit 1
    fi

    set -- $args
    if test ! -x ${RCDIR}/$1 ; then
    echo "${0##*/}: no such service $1" 1>&2
    exit 1
    fi
    rc=${RCDIR}/$1
    shift

    exec_rc $rc ${1+"$@"}
    exit $?
    the red sentences are the reason which cause this problem. it reset all enviroment variable and use its own.
    i'm curious about why it needs to do that? i comment and modify the relate codes and things return normal.

  2. #2
    Join Date
    Jun 2008
    Location
    UTC+10
    Posts
    9,683
    Blog Entries
    4

    Default Re: command"service" will break env var

    File a bug report then.

  3. #3
    ayanamist NNTP User

    Default Re: command"service" will break env var

    Quote Originally Posted by ken_yap View Post
    File a bug report then.
    then how-to? i'm newbie here and dont know how to file a bug....

  4. #4
    Join Date
    Jun 2008
    Location
    UTC+10
    Posts
    9,683
    Blog Entries
    4

    Default Re: command"service" will break env var

    http://bugzilla.novell.com
    Submitting Bug Reports - openSUSE

    You will be helping openSUSE get better and who knows, it might be fixed by 11.2. Thanks. (I'm not a developer though.)

  5. #5

    Default Re: command"service" will break env var

    I believe the code to be correct - when booting the system (and that's what the /etc/init.d scripts are mainly for) you have a very plain and simple environment.

    If you require additional setup etc, create an appropriate start script or provide a file /etc/sysconfig/* when those are system-configurable settings.

    Per-user configurable settings shouldn't be used that way - /etc/init.d works per system, not per user.

    With regards
    Jens

  6. #6
    Join Date
    Jun 2008
    Location
    UTC+10
    Posts
    9,683
    Blog Entries
    4

    Default Re: command"service" will break env var

    service foo start is supposed to be exactly equivalent to /etc/init.d/foo start for the sake of people used to RH systems. It's not a private mod, it's part of the aaa_base package.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •