Can't stop/restart polipo -- PID file not being created

Jon Kibler <[email protected]>
Newsgroups gmane.comp.web.polipo.user
Message-ID <[email protected]>
Hi,

For some reason, the PID file is not being created. Thus, any attempt
to stop/restart polipo fails.

Using:
   polipo-1.0.4.1-2.el5
on CentOS 5.x:
   2.6.18-194.32.1.el5 x86_64

Here are the details of "/etc/init.d/polipo start"

#!/bin/sh
#
# Polipo Startup script for the Polipo caching web proxy
#
# chkconfig: - 90 15
# description: Polipo is a lightweight caching web proxy that was designed \
#              as a personal cache.
# processname: polipo
### BEGIN INIT INFO
# Provides: polipo
# Required-Start: $local_fs $network $named $remote_fs
# Required-Stop: $local_fs $network $named $remote_fs
# Short-Description: start and stop Polipo caching web proxy
# Description: Polipo is a lightweight caching web proxy that was designed
#              as a personal cache.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions
+ . /etc/rc.d/init.d/functions
# -*-Shell-script-*-
#
# functions     This file contains functions to be used by most or all
#               shell scripts in the /etc/init.d directory.
#

TEXTDOMAIN=initscripts
++ TEXTDOMAIN=initscripts

# Make sure umask is sane
umask 022
++ umask 022

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
++ export PATH

# Get a sane screen width
[ -z "${COLUMNS:-}" ] && COLUMNS=80
++ '[' -z '' ']'
++ COLUMNS=80

[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="`/sbin/consoletype`"
++ '[' -z '' ']'
/sbin/consoletype
+++ /sbin/consoletype
++ CONSOLETYPE=pty

if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then
  . /etc/profile.d/lang.sh
fi
++ '[' -f /etc/sysconfig/i18n -a -z '' ']'
++ . /etc/profile.d/lang.sh
# /etc/profile.d/lang.sh - set i18n stuff

sourced=0
+++ sourced=0
for langfile in /etc/sysconfig/i18n $HOME/.i18n ; do
    [ -f $langfile ] && . $langfile && sourced=1
done
+++ for langfile in /etc/sysconfig/i18n '$HOME/.i18n'
+++ '[' -f /etc/sysconfig/i18n ']'
+++ . /etc/sysconfig/i18n
LANG="en_US.UTF-8"
++++ LANG=en_US.UTF-8
SYSFONT="latarcyrheb-sun16"
++++ SYSFONT=latarcyrheb-sun16
+++ sourced=1
+++ for langfile in /etc/sysconfig/i18n '$HOME/.i18n'
+++ '[' -f /root/.i18n ']'

if [ -n "$GDM_LANG" ]; then
    sourced=1
    LANG="$GDM_LANG"
    unset LANGUAGE
    if [ "$GDM_LANG" = "zh_CN.GB18030" ]; then
      export LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    fi
fi
+++ '[' -n '' ']'

if [ "$sourced" = 1 ]; then
    [ -n "$LANG" ] && export LANG || unset LANG
    [ -n "$LC_ADDRESS" ] && export LC_ADDRESS || unset LC_ADDRESS
    [ -n "$LC_CTYPE" ] && export LC_CTYPE || unset LC_CTYPE
    [ -n "$LC_COLLATE" ] && export LC_COLLATE || unset LC_COLLATE
    [ -n "$LC_IDENTIFICATION" ] && export LC_IDENTIFICATION || unset LC_IDENTIFI
CATION
    [ -n "$LC_MEASUREMENT" ] && export LC_MEASUREMENT || unset LC_MEASUREMENT
    [ -n "$LC_MESSAGES" ] && export LC_MESSAGES || unset LC_MESSAGES
    [ -n "$LC_MONETARY" ] && export LC_MONETARY || unset LC_MONETARY
    [ -n "$LC_NAME" ] && export LC_NAME || unset LC_NAME
    [ -n "$LC_NUMERIC" ] && export LC_NUMERIC || unset LC_NUMERIC
    [ -n "$LC_PAPER" ] && export LC_PAPER || unset LC_PAPER
    [ -n "$LC_TELEPHONE" ] && export LC_TELEPHONE || unset LC_TELEPHONE
    [ -n "$LC_TIME" ] && export LC_TIME || unset LC_TIME
    if [ -n "$LC_ALL" ]; then
       if [ "$LC_ALL" != "$LANG" ]; then
         export LC_ALL
       else
         unset LC_ALL
       fi
    else
       unset LC_ALL
    fi
    [ -n "$LANGUAGE" ] && export LANGUAGE || unset LANGUAGE
    [ -n "$LINGUAS" ] && export LINGUAS || unset LINGUAS
    [ -n "$_XKB_CHARSET" ] && export _XKB_CHARSET || unset _XKB_CHARSET

    consoletype=$CONSOLETYPE
    if [ -z "$consoletype" ]; then
      consoletype=$(/sbin/consoletype stdout)
    fi

    if [ -n "$CHARSET" ]; then
        case $CHARSET in
            8859-1|8859-2|8859-5|8859-8|8859-15|koi*)
                if [ "$TERM" = "linux" -a "$consoletype" = "vt" ]; then
                       echo -n -e '\033(K' 2>/dev/null > /proc/$$/fd/0
                fi
                ;;
        esac
    elif [ -n "$SYSFONTACM" ]; then
        case $SYSFONTACM in
            iso01*|iso02*|iso05*|iso08*|iso15*|koi*|latin2-ucw*)
                if [ "$TERM" = "linux" -a "$consoletype" = "vt" ]; then
                        echo -n -e '\033(K' 2>/dev/null > /proc/$$/fd/0
                fi
                ;;
        esac
    fi
    if [ -n "$LANG" ]; then
      case $LANG in
        *.utf8*|*.UTF-8*)
        if [ "$TERM" = "linux" ]; then
            if [ "$consoletype" = "vt" ]; then
                case $LANG in
                        ja*) LANG=en_US.UTF-8 ;;
                        ko*) LANG=en_US.UTF-8 ;;
                        si*) LANG=en_US.UTF-8 ;;
                        zh*) LANG=en_US.UTF-8 ;;
                        en_IN*) ;;
                        *_IN*) LANG=en_US.UTF-8 ;;
                esac
                [ -x /bin/unicode_start ] && /sbin/consoletype fg && /bin/unicod
e_start $SYSFONT $SYSFONTACM
            fi
        fi
        ;;
        *)
        if [ "$TERM" = "linux" ]; then
            if [ "$consoletype" = "vt" ]; then
                case $LANG in
                        ja*) LANG=en_US ;;
                        ko*) LANG=en_US ;;
                        si*) LANG=en_US ;;
                        zh*) LANG=en_US ;;
                        en_IN*) ;;
                        *_IN*) LANG=en_US ;;
                esac
                [ -x /bin/unicode_stop ] && /sbin/consoletype fg && /bin/unicode
_stop
            fi
        fi
        ;;
      esac
    fi

    unset SYSFONTACM SYSFONT
fi
+++ '[' 1 = 1 ']'
+++ '[' -n en_US.UTF-8 ']'
+++ export LANG
+++ '[' -n '' ']'
+++ unset LC_ADDRESS
+++ '[' -n '' ']'
+++ unset LC_CTYPE
+++ '[' -n '' ']'
+++ unset LC_COLLATE
+++ '[' -n '' ']'
+++ unset LC_IDENTIFICATION
+++ '[' -n '' ']'
+++ unset LC_MEASUREMENT
+++ '[' -n '' ']'
+++ unset LC_MESSAGES
+++ '[' -n '' ']'
+++ unset LC_MONETARY
+++ '[' -n '' ']'
+++ unset LC_NAME
+++ '[' -n '' ']'
+++ unset LC_NUMERIC
+++ '[' -n '' ']'
+++ unset LC_PAPER
+++ '[' -n '' ']'
+++ unset LC_TELEPHONE
+++ '[' -n '' ']'
+++ unset LC_TIME
+++ '[' -n '' ']'
+++ unset LC_ALL
+++ '[' -n '' ']'
+++ unset LANGUAGE
+++ '[' -n '' ']'
+++ unset LINGUAS
+++ '[' -n '' ']'
+++ unset _XKB_CHARSET
+++ consoletype=pty
+++ '[' -z pty ']'
+++ '[' -n '' ']'
+++ '[' -n '' ']'
+++ '[' -n en_US.UTF-8 ']'
+++ case $LANG in
+++ '[' xterm = linux ']'
+++ unset SYSFONTACM SYSFONT
unset sourced
+++ unset sourced
unset langfile
+++ unset langfile

# Read in our configuration
if [ -z "${BOOTUP:-}" ]; then
  if [ -f /etc/sysconfig/init ]; then
      . /etc/sysconfig/init
  else
    # This all seem confusing? Look in /etc/sysconfig/init,
    # or in /usr/doc/initscripts-*/sysconfig.txt
    BOOTUP=color
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \\033[0;39m"
    LOGLEVEL=1
  fi
  if [ "$CONSOLETYPE" = "serial" ]; then
      BOOTUP=serial
      MOVE_TO_COL=
      SETCOLOR_SUCCESS=
      SETCOLOR_FAILURE=
      SETCOLOR_WARNING=
      SETCOLOR_NORMAL=
  fi
fi
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/init ']'
++ . /etc/sysconfig/init
# color => new RH6.0 bootup
# verbose => old-style bootup
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
+++ BOOTUP=color
# Turn on graphical boot
GRAPHICAL=yes
+++ GRAPHICAL=yes
# column to start "[  OK  ]" label in
RES_COL=60
+++ RES_COL=60
# terminal sequence to move to that column. You could change this
# to something like "tput hpa ${RES_COL}" if your terminal supports it
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
+++ MOVE_TO_COL='echo -en \033[60G'
# terminal sequence to set color to a 'success' color (currently: green)
SETCOLOR_SUCCESS="echo -en \\033[0;32m"
+++ SETCOLOR_SUCCESS='echo -en \033[0;32m'
# terminal sequence to set color to a 'failure' color (currently: red)
SETCOLOR_FAILURE="echo -en \\033[0;31m"
+++ SETCOLOR_FAILURE='echo -en \033[0;31m'
# terminal sequence to set color to a 'warning' color (currently: yellow)
SETCOLOR_WARNING="echo -en \\033[0;33m"
+++ SETCOLOR_WARNING='echo -en \033[0;33m'
# terminal sequence to reset to the default color.
SETCOLOR_NORMAL="echo -en \\033[0;39m"
+++ SETCOLOR_NORMAL='echo -en \033[0;39m'
# default kernel loglevel on boot (syslog will reset this)
LOGLEVEL=3
+++ LOGLEVEL=3
# Set to anything other than 'no' to allow hotkey interactive startup...
PROMPT=yes
+++ PROMPT=yes
# Set to 'yes' to allow probing for devices with swap signatures
AUTOSWAP=no
+++ AUTOSWAP=no
++ '[' pty = serial ']'

if [ "${BOOTUP:-}" != "verbose" ]; then
   INITLOG_ARGS="-q"
else
   INITLOG_ARGS=
fi
++ '[' color '!=' verbose ']'
++ INITLOG_ARGS=-q

# Interpret escape sequences in an fstab entry
fstab_decode_str() {
        fstab-decode echo "$1"
}

# Check if any of $pid (could be plural) are running
checkpid() {
        local i

        for i in $* ; do
                [ -d "/proc/$i" ] && return 0
        done
        return 1
}

__readlink() {
    ls -bl "$@" 2>/dev/null| awk '{ print $NF }'
}

# __umount_loop awk_program fstab_file first_msg retry_msg umount_args
# awk_program should process fstab_file and return a list of fstab-encoded
# paths; it doesn't have to handle comments in fstab_file.
__umount_loop() {
        local remaining sig=
        local retry=3

        remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r)
        while [ -n "$remaining" -a "$retry" -gt 0 ]; do
                if [ "$retry" -eq 3 ]; then
                        action "$3" fstab-decode umount $5 $remaining
                else
                        action "$4" fstab-decode umount $5 $remaining
                fi
                sleep 2
                remaining=$(LC_ALL=C awk "/^#/ {next} $1" "$2" | sort -r)
                [ -z "$remaining" ] && break
                fstab-decode /sbin/fuser -k -m $sig $remaining >/dev/null
                sleep 5
                retry=$(($retry -1))
                sig=-9
        done
}

# Similar to __umount loop above, specialized for loopback devices
__umount_loopback_loop() {
        local remaining devremaining sig=
        local retry=3

        remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/moun
ts)
        devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/m
ounts)
        while [ -n "$remaining" -a "$retry" -gt 0 ]; do
                if [ "$retry" -eq 3 ]; then
                        action $"Unmounting loopback filesystems: " \
                                fstab-decode umount $remaining
                else
                        action $"Unmounting loopback filesystems (retry):" \
                                fstab-decode umount $remaining
                fi
                for dev in $devremaining ; do
                        losetup $dev > /dev/null 2>&1 && \
                                action $"Detaching loopback device $dev: " \
                                losetup -d $dev
                done
                remaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /p
roc/mounts)
                devremaining=$(awk '$1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}'
 /proc/mounts)
                [ -z "$remaining" ] && break
                fstab-decode /sbin/fuser -k -m $sig $remaining >/dev/null
                sleep 5
                retry=$(($retry -1))
                sig=-9
        done
}

# __proc_pids {program} [pidfile]
# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}

        pid=
        if [ -f "$pid_file" ] ; then
                local line p
                read line < "$pid_file"
                for p in $line ; do
                        [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
                done
                if [ -n "$pid" ]; then
                        return 0
                fi
                return 1 # "Program is dead and /var/run pid file exists"
        fi
        return 3 # "Program is not running"
}

# Output PIDs of matching processes, found using pidof
__pids_pidof() {
        pidof -c -o $$ -o $PPID -o %PPID -x "$1" || \
                pidof -c -o $$ -o $PPID -o %PPID -x "${1##*/}"
}


# A function to start a program.
daemon() {
        # Test syntax.
        local gotbase= force= nicelevel corelimit
        local pid base= user= nice= bg= pid_file=
        nicelevel=0
        while [ "$1" != "${1##[-+]}" ]; do
          case $1 in
            '')    echo $"$0: Usage: daemon [+/-nicelevel] {program}"
                   return 1;;
            --check)
                   base=$2
                   gotbase="yes"
                   shift 2
                   ;;
            --check=?*)
                   base=${1#--check=}
                   gotbase="yes"
                   shift
                   ;;
            --user)
                   user=$2
                   shift 2
                   ;;
            --user=?*)
                   user=${1#--user=}
                   shift
                   ;;
            --pidfile)
                   pid_file=$2
                   shift 2
                   ;;
            --pidfile=?*)
                   pid_file=${1#--pidfile=}
                   shift
                   ;;
            --force)
                   force="force"
                   shift
                   ;;
            [-+][0-9]*)
                   nice="nice -n $1"
                   shift
                   ;;
            *)     echo $"$0: Usage: daemon [+/-nicelevel] {program}"
                   return 1;;
          esac
        done

        # Save basename.
        [ -z "$gotbase" ] && base=${1##*/}

        # See if it's already running. Look *only* at the pid file.
        __pids_var_run "$base" "$pid_file"

        [ -n "$pid" -a -z "$force" ] && return

        # make sure it doesn't core dump anywhere unless requested
        corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"

        # if they set NICELEVEL in /etc/sysconfig/foo, honor it
        [ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL"

        # Echo daemon
        [ "${BOOTUP:-}" = "verbose" -a -z "${LSB:-}" ] && echo -n " $base"

        # And start it up.
        if [ -z "$user" ]; then
           $nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*"
        else
           $nice runuser -s /bin/bash $user -c "$corelimit >/dev/null 2>&1 ; $*"
        fi
        [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
}


# A function to stop a program.
killproc() {
        local RC killlevel= base pid pid_file= delay

        RC=0; delay=3
        # Test syntax.
        if [ "$#" -eq 0 ]; then
                echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-sign
al]"
                return 1
        fi
        if [ "$1" = "-p" ]; then
                pid_file=$2
                shift 2
        fi
        if [ "$1" = "-d" ]; then
                delay=$2
                shift 2
        fi


        # check for second arg to be kill level
        [ -n "${2:-}" ] && killlevel=$2

        # Save basename.
        base=${1##*/}

        # Find pid.
        __pids_var_run "$1" "$pid_file"
        if [ -z "$pid_file" -a -z "$pid" ]; then
                pid="$(__pids_pidof "$1")"
        fi

        # Kill it.
        if [ -n "$pid" ] ; then
                [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base "
                if [ -z "$killlevel" ] ; then
                       if checkpid $pid 2>&1; then
                           # TERM first, then KILL if not dead
                           kill -TERM $pid >/dev/null 2>&1
                           usleep 100000
                           if checkpid $pid && sleep 1 &&
                              checkpid $pid && sleep $delay &&
                              checkpid $pid ; then
                                kill -KILL $pid >/dev/null 2>&1
                                usleep 100000
                           fi
                        fi
                        checkpid $pid
                        RC=$?
                        [ "$RC" -eq 0 ] && failure $"$base shutdown" || success
$"$base shutdown"
                        RC=$((! $RC))
                # use specified level only
                else
                        if checkpid $pid; then
                                kill $killlevel $pid >/dev/null 2>&1
                                RC=$?
                                [ "$RC" -eq 0 ] && success $"$base $killlevel" |
| failure $"$base $killlevel"
                        elif [ -n "${LSB:-}" ]; then
                                RC=7 # Program is not running
                        fi
                fi
        else
                if [ -n "${LSB:-}" -a -n "$killlevel" ]; then
                        RC=7 # Program is not running
                else
                        failure $"$base shutdown"
                        RC=0
                fi
        fi

        # Remove pid file if any.
        if [ -z "$killlevel" ]; then
            rm -f "${pid_file:-/var/run/$base.pid}"
        fi
        return $RC
}

# A function to find the pid of a program. Looks *only* at the pidfile
pidfileofproc() {
        local pid

        # Test syntax.
        if [ "$#" = 0 ] ; then
                echo $"Usage: pidfileofproc {program}"
                return 1
        fi

        __pids_var_run "$1"
        [ -n "$pid" ] && echo $pid
        return 0
}

# A function to find the pid of a program.
pidofproc() {
        local RC pid pid_file=

        # Test syntax.
        if [ "$#" = 0 ]; then
                echo $"Usage: pidofproc [-p pidfile] {program}"
                return 1
        fi
        if [ "$1" = "-p" ]; then
                pid_file=$2
                shift 2
        fi
        fail_code=3 # "Program is not running"

        # First try "/var/run/*.pid" files
        __pids_var_run "$1" "$pid_file"
        RC=$?
        if [ -n "$pid" ]; then
                echo $pid
                return 0
        fi

        [ -n "$pid_file" ] && return $RC
        __pids_pidof "$1" || return $RC
}

status() {
        local base pid pid_file=

        # Test syntax.
        if [ "$#" = 0 ] ; then
                echo $"Usage: status [-p pidfile] {program}"
                return 1
        fi
        if [ "$1" = "-p" ]; then
                pid_file=$2
                shift 2
        fi
        base=${1##*/}

        # First try "pidof"
        __pids_var_run "$1" "$pid_file"
        RC=$?
        if [ -z "$pid_file" -a -z "$pid" ]; then
                pid="$(__pids_pidof "$1")"
        fi
        if [ -n "$pid" ]; then
                echo $"${base} (pid $pid) is running..."
                return 0
        fi

        case "$RC" in
                0)
                        echo $"${base} (pid $pid) is running..."
                        return 0
                        ;;
                1)
                        echo $"${base} dead but pid file exists"
                        return 1
                        ;;
        esac
        # See if /var/lock/subsys/${base} exists
        if [ -f /var/lock/subsys/${base} ]; then
                echo $"${base} dead but subsys locked"
                return 2
        fi
        echo $"${base} is stopped"
        return 3
}

echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"  OK  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 0
}

echo_failure() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo -n $"FAILED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

echo_passed() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
  echo -n $"PASSED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

echo_warning() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
  echo -n $"WARNING"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

# Inform the graphical boot of our current state
update_boot_stage() {
  if [ "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb-client ]; then
    /usr/bin/rhgb-client --update="$1"
  fi
  return 0
}

# Log that something succeeded
success() {
  #if [ -z "${IN_INITLOG:-}" ]; then
  #   initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
  #fi
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
  return 0
}

# Log that something failed
failure() {
  local rc=$?
  #if [ -z "${IN_INITLOG:-}" ]; then
  #   initlog $INITLOG_ARGS -n $0 -s "$1" -e 2
  #fi
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_failure
  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
  return $rc
}

# Log that something passed, but may have had errors. Useful for fsck
passed() {
  local rc=$?
  #if [ -z "${IN_INITLOG:-}" ]; then
  #   initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
  #fi
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_passed
  return $rc
}

# Log a warning
warning() {
  local rc=$?
  #if [ -z "${IN_INITLOG:-}" ]; then
  #   initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
  #fi
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_warning
  return $rc
}

# Run some action. Log its output.
action() {
  local STRING rc

  STRING=$1
  echo -n "$STRING "
  if [ "${RHGB_STARTED:-}" != "" -a -w /etc/rhgb/temp/rhgb-console ]; then
      echo -n "$STRING " > /etc/rhgb/temp/rhgb-console
  fi
  shift
  "$@" && success $"$STRING" || failure $"$STRING"
  rc=$?
  echo
  if [ "${RHGB_STARTED:-}" != "" -a -w /etc/rhgb/temp/rhgb-console ]; then
      if [ "$rc" = "0" ]; then
        echo_success > /etc/rhgb/temp/rhgb-console
      else
        echo_failure > /etc/rhgb/temp/rhgb-console
        [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
      fi
      echo > /etc/rhgb/temp/rhgb-console
  fi
  return $rc
}

# returns OK if $1 contains $2
strstr() {
  [ "${1#*$2*}" = "$1" ] && return 1
  return 0
}

# Confirm whether we really want to run this service
confirm() {
  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
  while : ; do
      echo -n $"Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
      read answer
      if strstr $"yY" "$answer" || [ "$answer" = "" ] ; then
         return 0
      elif strstr $"cC" "$answer" ; then
         rm -f /var/run/confirm
         [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=no
         return 2
      elif strstr $"nN" "$answer" ; then
         return 1
      fi
  done
}

# resolve a device node to its major:minor numbers in decimal or hex
get_numeric_dev() {
(
    fmt="%d:%d"
    if [ "$1" == "hex" ]; then
        fmt="%x:%x"
    fi
    ls -lH "$2" | awk '{ sub(/,/, "", $5); printf("'"$fmt"'", $5, $6); }'
) 2>/dev/null
}

# find the working name for a running dm device with the same table as one
# that dmraid would create
resolve_dm_name() {
(
    name="$1"

    line=$(/sbin/dmraid -ay -t --ignorelocking | \
        egrep -iv "no block devices found|No RAID disks" | \
        awk -F ':' "{ if (\$1 ~ /^$name$/) { print \$2; }}")
    for x in $line ; do
        if [[ "$x" =~ "^/dev/" ]] ; then
            majmin=$(get_numeric_dev dec $x)
            line=$(echo "$line" | sed -e "s,$x\( \|$\),$majmin\1,g")
        fi
    done
    line=$(echo "$line" | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//' \
               -e 's/ core [12] [[:digit:]]\+ / core [12] [[:digit:]]\\+ /')
    /sbin/dmsetup table | \
        sed -n -e "s/.*\(no block devices found\|No devices found\).*//" \
               -e "s/\(^[^:]\+\): $line\( \+$\|$\)/\1/p"
) 2>/dev/null
}

# Check whether file $1 is a backup or rpm-generated file and should be ignored
is_ignored_file() {
    case "$1" in
        *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
            return 0
            ;;
    esac
    return 1
}
# A sed expression to filter out the files that is_ignored_file recognizes
__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave
\)$/d'
++ __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpms
ave\)$/d'

# Source networking configuration.
. /etc/sysconfig/network
+ . /etc/sysconfig/network
NETWORKING=yes
++ NETWORKING=yes
NETWORKING_IPV6=no
++ NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
++ HOSTNAME=localhost.localdomain
CURRENT_PROFILE=Home
++ CURRENT_PROFILE=Home

polipo=${POLIPO-/usr/bin/polipo}
+ polipo=/usr/bin/polipo
prog=polipo
+ prog=polipo
config=${CONFIG-/etc/polipo/config}
+ config=/etc/polipo/config
pidfile=${PIDFILE-/var/run/polipo/polipo.pid}
+ pidfile=/var/run/polipo/polipo.pid
lockfile=${LOCKFILE-/var/lock/subsys/polipo}
+ lockfile=/var/lock/subsys/polipo
logfile=${LOGFILE-/var/log/polipo}
+ logfile=/var/log/polipo
cachedir=${CACHEDIR-/var/cache/polipo}
+ cachedir=/var/cache/polipo
piddir=$(dirname $pidfile)
dirname $pidfile
++ dirname /var/run/polipo/polipo.pid
+ piddir=/var/run/polipo
RETVAL=0
+ RETVAL=0

start() {
        # Check that networking is up.
        [ ${NETWORKING} = "no" ] && exit 1

        [ -x $polipo ] || exit 1

        [ `id -u` -ne 0 ] && exit 4

        # check if the polipo config is present
        [ -f $config ] || exit 6

        [ -e $logfile ] ||touch $logfile
        chmod -f 0640 $logfile
        chown -f polipo:polipo $logfile
        for i in $cachedir $piddir ; do
                if [ ! -d $i ] ; then
                        if [ ! -e $i -a ! -h $i ] ; then
                                mkdir -p $i || exit 1
                        fi
                fi
        done
        chmod -f 0750 $cachedir
        chown -f polipo:polipo $cachedir
        chmod -f 0755 $piddir
        chown -f polipo:polipo $piddir

        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} --user=polipo $polipo -c $config
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d 3 $polipo
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
        killproc -p ${pidfile} $polipo -USR1
        RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $polipo
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart|try-restart)
        if status -p ${pidfile} $polipo >&/dev/null; then
                stop
                start
        fi
        ;;
  force-reload|reload)
        reload
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|reload|status}"
        RETVAL=3
esac
+ case "$1" in
+ start
+ '[' yes = no ']'
+ '[' -x /usr/bin/polipo ']'
id -u
++ id -u
+ '[' 0 -ne 0 ']'
+ '[' -f /etc/polipo/config ']'
+ '[' -e /var/log/polipo ']'
+ chmod -f 0640 /var/log/polipo
+ chown -f polipo:polipo /var/log/polipo
+ for i in '$cachedir' '$piddir'
+ '[' '!' -d /var/cache/polipo ']'
+ for i in '$cachedir' '$piddir'
+ '[' '!' -d /var/run/polipo ']'
+ chmod -f 0750 /var/cache/polipo
+ chown -f polipo:polipo /var/cache/polipo
+ chmod -f 0755 /var/run/polipo
+ chown -f polipo:polipo /var/run/polipo
+ echo -n 'Starting polipo: '
Starting polipo: + daemon --pidfile=/var/run/polipo/polipo.pid --user=polipo /us
r/bin/polipo -c /etc/polipo/config
+ local gotbase= force= nicelevel corelimit
+ local pid base= user= nice= bg= pid_file=
+ nicelevel=0
+ '[' --pidfile=/var/run/polipo/polipo.pid '!=' -pidfile=/var/run/polipo/polipo.
pid ']'
+ case $1 in
+ pid_file=/var/run/polipo/polipo.pid
+ shift
+ '[' --user=polipo '!=' -user=polipo ']'
+ case $1 in
+ user=polipo
+ shift
+ '[' /usr/bin/polipo '!=' /usr/bin/polipo ']'
+ '[' -z '' ']'
+ base=polipo
+ __pids_var_run polipo /var/run/polipo/polipo.pid
+ local base=polipo
+ local pid_file=/var/run/polipo/polipo.pid
+ pid=
+ '[' -f /var/run/polipo/polipo.pid ']'
+ return 3
+ '[' -n '' -a -z '' ']'
+ corelimit='ulimit -S -c 0'
+ '[' -n '' ']'
+ '[' color = verbose -a -z '' ']'
+ '[' -z polipo ']'
+ runuser -s /bin/bash polipo -c 'ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/poli
po -c /etc/polipo/config'
+ '[' 0 -eq 0 ']'
+ success 'polipo startup'
+ '[' color '!=' verbose -a -z '' ']'
+ echo_success
+ '[' color = color ']'
+ echo -en '\033[60G'
                                                           + echo -n '['
[+ '[' color = color ']'
+ echo -en '\033[0;32m'
+ echo -n '  OK  '
  OK  + '[' color = color ']'
+ echo -en '\033[0;39m'
+ echo -n ']'
]+ echo -ne '\r'
+ return 0
+ return 0
+ RETVAL=0
+ echo

+ '[' 0 = 0 ']'
+ touch /var/lock/subsys/polipo
+ return 0

exit $RETVAL
+ exit 0




And, there is no PID file created:

polipo   15688     1  0 12:19 ?        00:00:00 /usr/bin/polipo -c
/etc/polipo/config

[root@localhost ~]# ls -la /var/run/polipo/
total 16
drwxr-xr-x  2 polipo polipo 4096 Mar 20  2010 ./
drwxr-xr-x 33 root   root   4096 Apr 27 11:30 ../


Any suggestions?

THANKS!

Jon Kibler

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.