[gelöst] Init-Script startet nicht bei Boot

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
PTBD
Beiträge: 5
Registriert: 26.05.2015 21:46:51

[gelöst] Init-Script startet nicht bei Boot

Beitrag von PTBD » 29.05.2015 13:43:29

Hallo,

am Ende meines Beitrages habe ich das volle Script angehängt. Als Vorlage dafür habe ich

Code: Alles auswählen

/etc/init.d/skeleton
genommen und damit gearbeitet.

Das Problem ist, dass - nachdem der Rechner gebootet hat - ich keine VNC Verbindung von einem anderen Rechner aufbauen kann. Also gehe ich davon aus, dass das Script nicht ausgeführt wird. Wenn ich das Script über

Code: Alles auswählen

service x11vnc start
starte, ist eine Verbindung möglich. Nur komischerweise ist der Befehl blockierend. Sollte normal ja nicht so sein, oder?

Das Script liegt in

Code: Alles auswählen

/etc/init.d
. Ich habe auch

Code: Alles auswählen

insserv x11vnc
ohne Fehler ausgeführt. Die Ideen gehen mir hier leider ab jetzt aus. Das ist alles, was ich im Internet recherchieren konnte, wo die Fehler liegen könnten, wenn ein Script nicht gestartet wird.

Code: Alles auswählen

#! /bin/sh
### BEGIN INIT INFO
# Provides:          x11vnc
# Required-Start:    $remote_fs $syslog lightdm 
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 
# Description:       Start VNC Server
### END INIT INFO

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Start VNC Server"
NAME=x11vnc
PASSWD=/etc/x11vnc.pass
LOGFILE=/var/log/x11vnc.log
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-display :0 -rfbport 5900 -auth /var/run/lightdm/root/:0 -oa $LOGFILE -rfbauth $PASSWD -shared -many"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$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

#
# Function that starts the daemon/service
#
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 --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
		|| return 1
	start-stop-daemon --start --quiet --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.
}

#
# Function that stops the daemon/service
#
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 --quiet --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 --quiet --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"
}

#
# Function that sends a SIGHUP to the daemon/service
#
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 --quiet --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
Zuletzt geändert von PTBD am 29.05.2015 15:24:31, insgesamt 1-mal geändert.

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Script startet nicht bei Boot

Beitrag von catdog2 » 29.05.2015 15:09:00

Verwendest du Debian jessie oder neuer mit systemd? Wenn ja am besten das skript vergessen und ein ordentliches .service file bauen, das ist viel einfacher zu bauen und zu debuggen.

/etc/systemd/system/x11vnc.service:

Code: Alles auswählen

[Unit]
Description=Start x11vnc
After=display-manager.service
Requires=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -display :0 -rfbport 5900 -auth /var/run/lightdm/root/:0 -rfbauth /etc/x11vnc.pass -shared -many"

[Install]
WantedBy=graphical.target

Code: Alles auswählen

systemctl daemon-reload
systemctl enable x11vnc.service
systemctl start x11vnc.service
systemctl status x11vnc.service
Ist jetzt nur spontan und ungetestet, ob das mit display-manager.service funktioniert weiss ich nicht, evtl durch lightdm.service ersetzen. Falls alles klappt solltest du möglichst noch versuchen das ding als nicht root zu starten mit (unterhalb von [Service]) User=someuser Group=someuser, falls du vorher die rechte des auth files anpassen willst kannst du das mit PermissionsStartOnly=yes in ExecStartPre=/usr/bin/somecommand tun. Siehe man systemd.{exec,unit,service}
Unix is user-friendly; it's just picky about who its friends are.

PTBD
Beiträge: 5
Registriert: 26.05.2015 21:46:51

Re: Init-Script startet nicht bei Boot

Beitrag von PTBD » 29.05.2015 15:13:21

Sorry, diese Info habe ich vergessen. Ich benutze Wheezy. Kein systemd, da das

Code: Alles auswählen

dist-upgrade
das Betriebssystem auf der Cubox (armhf) ins Unglück stürzen würde.

Edit:

Ich habe aber gerade eine andere Lösung gefunden, die für mich genau so funktioniert, wie ich das möchte.

Kurz das wichtigste:
- xinetd installieren.
- in die Datei /etc/xinetd.d/x11vnc folgendes einfügen

Code: Alles auswählen

service x11vnc
{
  type = UNLISTED
  disable = no
  socket_type = stream
  protocol = tcp
  wait = no
  user = root
  server = /usr/bin/x11vnc
  server_args = -inetd -o /var/log/x11vnc.log -display :0 -forever -bg -rfbauth /etc/vncpasswd -shared -enablehttpproxy -forever -nolookup -auth /var/run/lightdm/root/:0    
  port = 5900
}
- chmod a+x /etc/xinetd.d/x11vnc
- Neustarten und es läuft. :THX:

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Script startet nicht bei Boot

Beitrag von catdog2 » 29.05.2015 15:18:25

Dann würde ich evtl. mal versuchen das über den display manager selbst zu starten, von lightdm habe ich keine Ahnung aber normalerweise haben die Dinger sowas wie ein Xstartup Skript o.ä. dafür.
Unix is user-friendly; it's just picky about who its friends are.

PTBD
Beiträge: 5
Registriert: 26.05.2015 21:46:51

Re: Init-Script startet nicht bei Boot

Beitrag von PTBD » 29.05.2015 15:27:40

catdog2 hat geschrieben:Dann würde ich evtl. mal versuchen das über den display manager selbst zu starten, von lightdm habe ich keine Ahnung aber normalerweise haben die Dinger sowas wie ein Xstartup Skript o.ä. dafür.
Danke, habe mein Beitrag editiert. Konnte das Problem auf einen anderen Weg lösen.

Antworten