컵을 구성할 때 "invoke-rc.d: initscript 컵, "시작" 작업이 실패했습니다."

컵을 구성할 때 "invoke-rc.d: initscript 컵, "시작" 작업이 실패했습니다."

을 실행하면 apt-get -f install다음과 같은 예외 출력이 표시됩니다.

Setting up cups (1.5.0-8) ...
start: Job failed to start
invoke-rc.d: initscript cups, action "start" failed.
dpkg: error processing cups (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 cups
E: Sub-process /usr/bin/dpkg returned an error code (1)

아래에서 달리고 있어요우분투 오네릭 오셀롯, x64. 디버깅을 어디서 시작해야 할지 모르겠습니다. 어떤 제안이라도 주시면 감사하겠습니다.

답변1

구성에 문제가 있습니다컴퓨터 지원 시스템(Linux용 네트워크 인쇄 인프라) CUPS가 문제가 아닌 경우 CUPS( apt-get remove cups)를 제거하고 다시 시도하여 문제를 일시적으로 해결할 수 있습니다 apt-get -f install.

CUPS 문제 진단에 관심이 있는 경우 현재 상황을 파악하기 위해 시도해 볼 수 있는 몇 가지 방법이 있습니다. apt-get효과적으로 실행 중입니다 start cups(이전 Ubuntu 및 기타 배포판이 실행됨 /etc/init.d/cups start) service cups start. 수동으로 실행하여 유용한 정보가 표시되는지 확인할 수 있습니다(아마도 표시되지 않을 수도 있음). 최근 변경 로그( ls -ltra /var/log)를 확인하고 힌트를 제공하는 것이 있는지 확인합니다. 일반적으로 CUPS와 같은 데몬은 로그 파일에 오류나 경고를 기록합니다.

또한 확인해 주세요.컵 프로필 /etc/cups/cupsd.conf잘못된 것이 있는지 확인하세요.

그러나 이것은 갑자기 일어난 일이 아니어야 합니다. 달리기를 시작하게 된 계기는 무엇이었나요 apt-get -f install?

답변2

문제는 upstart가 컵 데몬을 시작할 수 없다는 것입니다. 9월부터 이런 문제가 생겼습니다. 안정 버전에서 이 버그가 수정되기를 바랍니다.

저는 게을러서 이 문제를 해결하지 못했지만 몇 가지 작은 해결 방법을 사용했습니다(데스크톱 컴퓨터에서만 사용 가능로컬 프린터 사용):

mv /etc/apparmor.d/usr.sbin.cupsd /etc/apparmor.d/bad_profiles/
# apparmor complains about cups profile

rm -f /etc/init.d/cups
# this is link to upstart-job

나는 다음과 같이 init 스크립트(/etc/init.d/cups)를 사용합니다:

#!/bin/bash
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Common Unix Printing Daemon"
NAME=cupsd
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS=""
PIDFILE=/var/run/cups/$NAME.pid
#SCRIPTNAME=/etc/init.d/$NAME
SCRIPTNAME=./$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --verbose --user lp --group lpadmin --pid $PIDFILE \
                --exec $DAEMON --test || return 1
        start-stop-daemon --start --verbose --user lp --group lpadmin --pidfile $PIDFILE \
                --exec $DAEMON -- $DAEMON_ARGS || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
        #$DAEMON $DAEMON_ARGS &
        #echo `pidof cupsd`>$PIDFILE
}

do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --verbose --pidfile $PIDFILE --name $NAME
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
      [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
       echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac

exit 0

다음으로 (루트로) 쓸 수 있습니다:

# apt-get install -f

그리고 bash가 있어야 합니다.

관련 정보